Frage: Kann Spring-Point-Cut-Ausdrücke auf nicht verwalteten Federkomponenten wie Domänenobjekt ausgeführt werden? Aus meinen Experimenten sieht es so aus, nicht, also was ist der beste Weg, um Pointcut-Ausdrücke auf einem regulären Objekt auszuführen?AspectJ Pointcut-Ausdruck auf Domänenobjekten, die nicht von Spring verwaltet werden
Ich habe den benutzerdefinierten Annotationsnamen @Encrypt erstellt, sodass das Feld, wenn es über einem Feld in einem Domänenobjekt verwendet wird, an einen Webdienst gesendet und automatisch verschlüsselt wird.
Ich begann zuerst mit Annotation auf Methodenebene und fand, dass Punktschnittausdruck nicht auf Objekten funktioniert, die nicht von Spring verwaltet werden, es muss eine Frühlingsbohne sein.
1. Frühling Aspekt: Checks für benutzerdefinierte Anmerkung @Encrypt und druckt.
@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. Individuelle Annotation:
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Encrypt
{
// Handled by EncryptFieldAspect
}
3. Domain-Objekt mit Annotation
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. Invocation
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");
Dies scheint ein XY zu sein Problem (siehe: http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Könnten Sie bitte erklären, wann die Verschlüsselung ausgeführt werden soll? Mit anderen Worten, das Problem, das Sie versuchen zu lösen. – Apokralipsa
@Apokralipsa Ich habe meine Frage aktualisiert, hoffe, das macht es klar. –