2014-12-17 4 views
5

Ich entwickle eine Java (JDK1.6) Anwendung mit Spring Framework (4.0.5) und AspectJ für AOP Logging.Spring - AspectJ pointcut für Konstruktor Objekt mit Annotation

Meine Aspect-Klassen funktionieren gut, aber ich kann keinen Punktcut für Konstruktorobjekt erstellen.

Das ist mein Ziel:

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

Das ist mein Aspect Klasse:

@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"); 
    } 
} 

Wie kann ich einen pointcut für meine Konstruktor-Objekt erstellen?


Dank

+0

@kocko die '' 'dort sind, ich habe sie verfehlt, als ich die Frage eintippte. – PapaSmurf

+0

Ich glaube nicht, dass Sie den Erbaueranruf im reinen Frühling AOP abfangen können. –

+0

@SotiriosDelimanolis wie kann ich den Erbaueranruf abfangen? – PapaSmurf

Antwort

9

Sotirios Delimanolis insofern recht, als Frühling AOP nicht Konstruktor Abfangen nicht unterstützt, wird es voll AspectJ brauchen. Das Spring-Handbuch, Kapitel 9.8 Using AspectJ with Spring applications, beschreibt die Verwendung mit LTW (Load-Time Weben).

Des Weiteren gibt es ein Problem mit Ihrem pointcut

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

Konstrukteurs keine Rückgabetypen wie Methoden in AspectJ Syntax haben, so dass Sie die führende * entfernen müssen:

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

Das ist genau das, was ich brauchte - ich nahm an, dass Konstruktoraufrufe von einer Aussage wie der ersten oben aufgegriffen würden. – JoshC13

Verwandte Themen