gpt4 book ai didi

java - Spring AOP - 切入点未触发

转载 作者:行者123 更新时间:2023-12-04 06:49:14 25 4
gpt4 key购买 nike

我刚刚开始在我的项目中使用 Spring AOP,并且在让 Spring AOP 正常工作方面遇到了一些问题。

我有两个对象,TransportImpl 和 SesssionImpl,我想通过 AOP 进行分析。两个对象(bean)都是通过 Spring 初始化的。两个bean都是业务的实现
接口(interface)(传输和 session )。我可以让应用到 TransportImpl bean 的方面正常工作,但应用到 SessionImpl 的方面不会触发。我可以确认
"mySessionMonitor"Aspect 由 Spring 初始化,并且 SessionImpl 对象也被初始化,没有任何异常或错误。

我已将 PointCuts 和 Aspect 简化为可能的最基本形式。我本来期望下面描述的 PointCut sessionOperation
在初始化 SessionImpl bean 并调用 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());
}
}

最佳答案

我个人更喜欢将 Aspect 切入点配置放在应用程序上下文中,而您缺少 aop:aspect 中的 ref。

 <bean id="mySessionMonitor"   class="my.app.aspects.SessionMonitoringAspect" />

<aop:config proxy-target-class="true">
<aop:aspect ref="mySessionMonitor">
<aop:pointcut id="around" expression="execution (public * *(..))"/></aop:pointcut>
<aop:around pointcut-ref="around" method="aroundAdvice"/>
</aop:aspect>
</aop:config>

关于java - Spring AOP - 切入点未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com