2014-12-17 15 views
5

Sto sviluppando un'applicazione java (JDK1.6) con Spring framework (4.0.5) e AspectJ per AOP Logging.Spring - AspectJ pointcut per oggetto costruttore con annotazione

Le mie classi Aspect funzionano bene ma non riesco a creare un collegamento per oggetto costruttore.

Questo è il mio oggetto:

@Controller 
public class ApplicationController { 
    public ApplicationController(String myString, MyObject myObject) { 
     ... 
    } 
    ... 
    .. 
    . 
} 

Questa è la mia classe Aspetto:

@Aspect 
@Component 
public class CommonLogAspect implements ILogAspect { 
    Logger log = Logger.getLogger(CommonLogAspect.class); 

    // @Before("execution(my.package.Class.new(..))) 
    @Before("execution(* *.new(..))") 
    public void constructorAnnotatedWithInject() { 
     log.info("CONSTRUCTOR"); 
    } 
} 

Come si crea un pointcut per il mio oggetto costruttore?


Grazie

+0

@kocko la "" ci sono, li ho mancati quando stavo scrivendo la domanda – PapaSmurf

+0

Non credo che tu possa intercettare la chiamata del costruttore in puro Spring AOP. –

+0

@SotiriosDelimanolis come posso intercettare la chiamata del costruttore? – PapaSmurf

risposta

9

Sotirios Delimanolis si trova proprio nella misura in cui Spring AOP non supporta costruttore intercettazione, si ha bisogno completa AspectJ per esso. Il manuale Spring, capitolo 9.8 Using AspectJ with Spring applications, descrive come utilizzarlo con LTW (caricamento in tempo di caricamento).

Inoltre, c'è un problema con il vostro pointcut

@Before("execution(* *.new(..))") 

costruttori non hanno tipi restituiti come metodi nella sintassi AspectJ, quindi è necessario rimuovere il leader *:

@Before("execution(*.new(..))") 
+0

Questo è esattamente ciò di cui avevo bisogno - ho ipotizzato che le chiamate del costruttore venissero rilevate da una dichiarazione come quella precedente. – JoshC13