Programowanie aspektowe i wywoływanie metoda advice

Programowanie aspektowe i wywoływanie metoda advice
J1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:224
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:

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

to kompilator pokazuje mi

Kopiuj
 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.


edytowany 3x, ostatnio: Jonki1997
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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ć.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.