Я только начинаю работу со Spring AOP в моем проекте и у меня возникают некоторые проблемы с правильной работой Spring AOP.
У меня есть два объекта, TransportImpl и SesssionImpl, которые я хотел бы профилировать через AOP. Оба объекта (бины) инициализируются через Spring. Оба бина являются реализациями бизнеса
интерфейсы (транспорт и сессия). Я могу заставить Аспекты, примененные к bean-компоненту TransportImpl, работать хорошо, но те, которые применяются к SessionImpl, просто не запускаются. Я могу подтвердить, что
Аспект «mySessionMonitor» инициализируется Spring, и что объект SessionImpl также инициализируется без каких-либо исключений или ошибок.
Я сократил свои PointCuts и Aspect до максимально возможной формы. Я ожидал бы PointCut sessionOperation , описанный ниже
срабатывать, когда инициализируется компонент SessionImpl и вызывается метод инициализации init. Но этого никогда не происходит. Что может быть не так?
Из файла конфигурации:
<bean id="MyTransport" class="my.app.transport.TransportImpl" scope="singleton" />
<bean id="MySession" class="my.app.session.SessionImpl" init-method="initialise" scope="singleton" />
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="myTransportMonitor" />
<aop:include name="mySessionMonitor" />
</aop:aspectj-autoproxy>
<bean id="myTransportMonitor" class="my.app.aspects.TransportMonitoringAspect"/>
<bean id="mySessionMonitor" class="my.app.aspects.SessionMonitoringAspect" />
Аспект код
// Aspect monitoring code
@Aspect
public class SessionMonitoringAspect
{
private Logger fileLogger = Logger.getLogger("myLogger");
public void initialise()
{
fileLogger.info("Initialising SessionMonitoringAspect");
}
@Pointcut ("execution (public * *(..))")
private void anyPublicOperation(){}
@Pointcut ("within(my.app.session..*)")
private void inSession(){}
@Pointcut("anyPublicOperation() && inSession()")
private void sessionOperation(){}
@Before("sessionOperation()")
public void sessionOperationDetected(JoinPoint jp)
{
fileLogger.info("Session operation detected - signature: " + jp.getSignature());
}
}