MEMon
18-11-2010, 09:40
Ciao, mi sto cimentando per la prima volta con AspectJ, e ho qualche problemino.
Vorrei intercettare alcuni metodi e quindi ho pensato ad utilizzare gli aspetti, precisamente l'ArounAdvice che permette di intercettare del tutto un metodo, quindi poterne gestire il prima, durante e il dopo.
Ho creato il mio aspetto giusto per vedere se intercetta qualcosa, da quel che leggo nelle reference di spring, dovrebbe intercettare tutti i metodi che sono annotati con @Transactional:
@Aspect
public class SessionInterceptor {
@Around("@target(org.springframework.transaction.annotation.Transactional)")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("INTERCEPT: "+pjp.toLongString());
return pjp.proceed();
}
}
Funziona bene, il punto è che funziona solo sui proxy, voglio dire, se istanzio una classe usando new MyClass(), e questa classe ha metodi annotati con @Transactional, non viene intercettato nulla perchè non è un proxy ma una vera istanza di classe.
C'è modo di poter usare gli aspetti su oggetti non-proxy?
Vorrei intercettare alcuni metodi e quindi ho pensato ad utilizzare gli aspetti, precisamente l'ArounAdvice che permette di intercettare del tutto un metodo, quindi poterne gestire il prima, durante e il dopo.
Ho creato il mio aspetto giusto per vedere se intercetta qualcosa, da quel che leggo nelle reference di spring, dovrebbe intercettare tutti i metodi che sono annotati con @Transactional:
@Aspect
public class SessionInterceptor {
@Around("@target(org.springframework.transaction.annotation.Transactional)")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("INTERCEPT: "+pjp.toLongString());
return pjp.proceed();
}
}
Funziona bene, il punto è che funziona solo sui proxy, voglio dire, se istanzio una classe usando new MyClass(), e questa classe ha metodi annotati con @Transactional, non viene intercettato nulla perchè non è un proxy ma una vera istanza di classe.
C'è modo di poter usare gli aspetti su oggetti non-proxy?