저는 프로젝트에서 Spring AOP를 시작하고 Spring AOP가 제대로 작동하는 데 몇 가지 문제가 있습니다.Spring AOP - 트리거하지 않는 Pointcut
나는 AOP를 통해 프로파일 링하고자하는 TransportImpl과 SesssionImpl의 두 객체가 있습니다. 두 객체 (빈)는 Spring을 통해 초기화됩니다. 두 콩은 모두 비즈니스 용 인터페이스 (전송 및 세션)의 구현입니다. Aspects를 TransportImpl 빈에 적용하면 제대로 작동하지만 SessionImpl에 적용된 Aspects는 실행되지 않습니다. "mySessionMonitor"Aspect가 Spring에 의해 초기화되고 SessionImpl 객체가 예외 나 오류없이 초기화된다는 것을 확인할 수 있습니다.
가능한 가장 기본적인 형식으로 PointCuts 및 Aspect를 제거했습니다. SessionImpl Bean이 초기화되고 init-method initialise가 호출 될 때 PointCut sessionOperation이 아래에 설명 된대로 이 발생합니다. 그러나 이것은 결코 일어나지 않습니다. 여기서 무엇이 잘못 될 수 있습니까? 구성 파일에서
:<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());
}
}
aop : pointcut 속성은 advice가 interceed 할 곳의 표현식을 지정합니다. id는 사용자가 지정한 이름으로 aop : around 행에서 사용되며 @Aspect에서 실행해야하는 메서드를 정의합니다. – ndtreviv