2014-12-17 25 views
5

Zajmuję się tworzeniem aplikacji java (JDK1.6) ze Spring framework (4.0.5) i AspectJ dla AOP Logging.Spring - AspectJ pointcut dla obiektu konstruktora z dopiskiem

Moje klasy Aspect działają poprawnie, ale nie mogę utworzyć punktu dla obiektu konstruktora.

To mój przedmiot:

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

To moja klasa Aspekt: ​​

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

Jak mogę utworzyć punkt przekroju dla mojego obiektu konstruktora?


Dzięki

+0

@kocko '' są, tęskniłem za nimi kiedy pisałem pytanie – PapaSmurf

+0

Nie wierzę, że możesz przechwycić wywołanie konstruktora w czystym Spring AOP –

+0

@SotiriosDelimanolis jak mogę przechwycić wywołanie konstruktora? – PapaSmurf

Odpowiedz

9

Sotirios Delimanolis jest w porządku, o ile Wiosną AOP nie obsługuje konstruktora przechwycenie, trzeba zrobić pełną AspectJ dla niego. W podręczniku Spring, rozdział 9.8 Using AspectJ with Spring applications, opisano sposób korzystania z LTW (tkanie czasu ładowania).

Ponadto, istnieje problem z punktu przekroju

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

Konstruktorzy nie mają takich typów zwracanych metod składni AspectJ, więc trzeba usunąć wiodącą *:

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

Dokładnie tego potrzebowałem - założyłem, że wywołanie konstruktora zostanie odebrane przez instrukcję podobną do pierwszej powyżej. – JoshC13