Чтобы реализовать ведение журнала с использованием Spring AOP, я выполнил следующие простые шаги. Но похоже, что это не работает. Любая помощь будет полезна
1) Создан класс MyLoggingAspect
import org.aspectj.lang.ProceedingJoinPoint;
public class MyLoggingAspect
{
public MyLoggingAspect() {
super();
System.out.println("Instantiated MyLoggingAspect");
}
public Object log(ProceedingJoinPoint call) throws Throwable
{
System.out.println("from logging aspect: entering method [" + call.toShortString()
+"] with param:"+call.getArgs()[0] );
Object point = call.proceed();
System.out.println("from logging aspect: exiting method [" + call.toShortString()
+ "with return as:" +point);
return point;
}
}
2) Создал класс (TixServiceImpl), в котором я хочу вести журнал
public class TixServiceImpl implements TixService{
@Override
public void calculateSomething() {
String s = "did some calculation..";
System.out.println(s);
}
@Override
public String getTixName() {
return null;
}
}
3) Создал файл весна-аспектj.xml
<beans...
<bean id = "LoggingAspect" class = "MyLoggingAspect"/>
<aop:config>
<aop:aspect ref = "LoggingAspect">
<aop:pointcut id = "myCutLogging"
expression = "execution(* TixService*.*(..))"/>
<aop:around pointcut-ref = "myCutLogging" method = "log"/>
</aop:aspect>
</aop:config>
</beans>
4) Создал простой тестовый клиент (TixClient)
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class TixClient {
public static void main(String[] a){
ApplicationContext context = new FileSystemXmlApplicationContext("conf/spring-aspectj.xml");
TixService tix = new TixServiceImpl();
tix.calculateSomething();
String s = tix.getTixName();
System.out.println("End of the the client invocation!!");
}
}
5) Это дает мне следующий Выход
...
Instantiated MyLoggingAspect
did some calculation..
End of the the client invocation!!
Я просто проверяю ваш код, но у меня есть подозрение, что проблема в том, что вы не получаете свой экземпляр TixServiceImpl
из Spring, а скорее вручную создаете его экземпляр в своем TixClient
. Я думаю, что ваш TixService
должен быть bean-компонентом Spring, полученным из Spring ApplicationContext, чтобы Spring имел возможность настроить аспекты в возвращаемом экземпляре.
Скотт Бэйл прав: пусть spring создаст для вас экземпляр Tix ServiceImpl. Также в подобных случаях включение журнала Springs может помочь, потому что оно сообщает вам, сколько целей для аспекта / сервиса было найдено.
Как включить весеннюю вырубку?
В документации Spring представлены различные способы включения ведения журнала: static.springsource.org/spring/docs/3.0.x/…
Спасибо за подсказку, сработало. Было бы хорошо, если бы это было упомянуто в примерах / примерах / учебных пособиях, доступных в Интернете.