Programowanie aspektowe i wywoływanie metoda advice

0

Przerabiam sobie odcinek z programowania aspektowego na i mam dziwną sytuację, która nie występuje na filmie. Może jest to spowodowane różnicą w wersji AspectJ(ja mam najnowszą, a na filmie jest 1.8.4). Autor filmu pokazuje, że metody advice są wywoływanie podczas używania metody. Natomiast u mnie wykonywane są również podczas pobierania beana. Gdy mam taki kod:

 SomeBean someBean = context.getBean("someBean", SomeBean.class);
		someBean.someMethod();

to kompilator pokazuje mi

 mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logBefore
INFO: Execution method afterSingletonsInstantiated
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logExecutionTime
INFO: Execution time 48 ms
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logAfter
INFO: After method afterSingletonsInstantiated
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logAfterReturning
INFO: Returned value null
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logBefore
INFO: Execution method someMethod
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logExecutionTime
INFO: Execution time 31 ms
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logAfter
INFO: After method someMethod
mar 16, 2017 12:15:03 AM info.jonki.aop.LoggingAspect logAfterReturning
INFO: Returned value some value

Dodatkowo za pierwszym razem zamiast nazwy metody wyświetla mi "afterSingletonsInstantiated". Coś 'po instancji singleton', no tak, bo domyślnie jest to singleton, tylko czemu mi to pokazuje, a autorowi filmu nie. Dodam, że w pliku XML działało to bez problemu. Więc zamiast użyć metod advice tylko dla metody 'someMethod', to jeszcze używa tych metod dla pobierania beana, co w efekcie podwaja mi wynik programu.

0

Zgaduje że Spring wygenerował dynamiczne proxy dla tego twojego beana (dość typowe) i dorzucił tam pewien kod związany np. z inicjalizacją / wstrzykiwaniem. Pamiętaj że Spring wspiera "magiczne" wstrzykiwanie za pomocą "pól" tzn potrafi wstrzykiwać nawet jeśli nie ma konstruktora ani setterów. A tu nie działa zadna magia, tylko Spring generuje proxy z dodatkowym kodem. Bardzo możliwe że w przypadku konfigurowania beana xmlem część tej magii nie jest dorzucana bo trzeba wszystko explicite zdefiniować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1