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.