AOP and REST
As a module developer, you may face a situation where you want to extend the behavior of a lower-level module's REST resource, without changing its URL. You can use Aspect-Oriented Programming (AOP) to achieve this.
To begin, create a new class annotated with both org.springframework.stereotype.Component and org.aspectj.lang.annotation.Aspect. Add Pointcuts and other annotations as dictated by AspectJ. For example, the code below will run after a return from the "getSample()" method of SampleAopResource in module "platformtestmodule":
@Component@Aspectpublic class SampleAopResourceListener { @Pointcut("execution(com.onenetwork.platformtestmodule.rest.SampleAopResource.Sample com.onenetwork.platformtestmodule.rest.SampleAopResource.getSample())") public void getSample() { } @AfterReturning(pointcut = "getSample()", returning = "sample") public Sample afterReturning(Sample sample) { sample.setValue("alteredSample"); return sample; }}Once this is in place, make sure this class package is included in your *-app-context.xml spring file:
...<context:component-scan base-package="com.onenetwork.aopsamplemodule.mpt,com.onenetwork.aopsamplemodule.rest"/>...Now, once you build and restart the server, your SampleAopResourceListener should be called at the conclusion of SampleAopResource.getSample(), before the values are provided to Jersey for serialization in the HTTP response.