我是Spring和AOP的新手。我正在嘗試這個簡單的事情,我已經創建了一個自定義註釋,當它放在任何方法之前時應該執行一些代碼。 這是註釋,我創建Spring AOP切入點不觸發
// Declares a custom annotation that validates json
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JsonSchemaAnnotation {
}
接下來,我創建了春天看點類持有邏輯
@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");
}
}
這是我簡單的測試類
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");
}
問題是我的春天aop永遠不會被觸發。我已經包含在一個bean我configuration.xml
<aop:aspectj-autoproxy>
<aop:include name="UpdateUIMetadataInterceptor" />
</aop:aspectj-autoproxy>
<bean id="updateUI" class="com.fico.cardinal.cm.interceptor.UpdateUIMetadataInterceptor" />
任何人都可以指出我錯過了什麼?
指出,我按照[這](http://eggsylife.co .uk/2010/02/03/spring-annotation-based-aop-and-inter-ball-of /)博客 – rockydgeekgod
你用new創建你的'ValidationTest'對象,所以它不被Spring管理。你必須在你的應用程序上下文中將它作爲一個bean,然後通過你的'context'變量獲得對它的引用 –
剛剛通過bean創建它。仍然沒有改善。我想我錯過了更多。 – rockydgeekgod