I am new to Spring and AOP. I am trying this simple thing where I have created a custom annotation which when placed before any method should execute some code. This is the annotation I created
// Declares a custom annotation that validates json @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface JsonSchemaAnnotation { } Next I created the Spring Aspect class which holds the logic
@Aspect public class UpdateUIMetadataInterceptor { @Pointcut("execution(public * com.fico.cardinal.cm.*.*(..))") public void anyPublicMethod() { System.out.println("Running"); } @Before("anyPublicMethod() && @annotation(jsonSchemaAnnotation)") public void validateJson(ProceedingJoinPoint pjp) throws Throwable { System.out.println("Running"); } } And this is my simple test class
public class ValidationTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring/configuration.xml"); String jsondata = "{\"id\": \"EXPENSE_REPORT\",\"properties\": {\"transactionType\": \"EXPENSE_REPORT\"},\"sections\": []} ]}"; ValidationTest test = new ValidationTest(); test.jsonValidationTest("dummy", jsondata); ((AbstractApplicationContext) context).close(); } @JsonSchemaAnnotation public void jsonValidationTest(String dummy, String jsondata) { System.out.println("Success"); } The problem is my spring aop never gets triggered. I have included a bean in my configuration.xml
<aop:aspectj-autoproxy> <aop:include name="UpdateUIMetadataInterceptor" /> </aop:aspectj-autoproxy> <bean id="updateUI" class="com.fico.cardinal.cm.interceptor.UpdateUIMetadataInterceptor" /> Can anyone point out what I am missing?
ValidationTestobject using new, so it's not managed by Spring. You have to have it as a bean in your application context and then obtain reference to it through yourcontextvariable