問:春天在非託管的彈簧組件,如域對象運行點切的表達?從我的實驗看來,它沒有,那麼在常規對象上運行切入點表達式的最佳方式是什麼?域AspectJ切入點表達式對象不受Spring管理
我創建自定義註解的名稱@Encrypt,這樣,當它是在一個域對象使用上的場的頂部,該字段被髮送到web服務,並且自動加密。
我第一次開始使用方法級別的註釋,發現切入點表達不上不是由Spring管理對象的工作,它必須是一個Spring bean。
1. Spring指標:檢查自定義註釋@Encrypt並打印出來。
@Aspect
public class EncryptAspect {
@Around("@annotation(encrypt)")
public Object logAction(ProceedingJoinPoint pjp, Encrypt encrypt)
throws Throwable {
System.out.println("Only encrypt annotation is running!");
return pjp.proceed();
}
}
2.定製譯註:使用
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Encrypt
{
// Handled by EncryptFieldAspect
}
3. Domain對象註釋
public interface CustomerBo {
void addCustomerAround(String name);
}
public class CustomerBoImpl implements CustomerBo {
@Encrypt
public void addCustomerAround(String name){
System.out.println("addCustomerAround() is running, args : " + name);
}
}
4.調用
ApplicationContext appContext = new ClassPathXmlApplicationContext("http-outbound-config.xml");
// CustomerBoImpl customer = new CustomerBoImpl(); --> Aspect is not fired if object is created like this.
CustomerBo customer = (CustomerBo) appContext.getBean("customerBo"); // Aspect Works
customer.addCustomerAround("test");
這似乎是一個XY問題(請參閱:http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你能解釋一下,你想要什麼時候運行加密?換句話說,你正試圖解決的問題。 – Apokralipsa
@Apokralipsa我更新了我的問題,希望這個清楚。 –