gpt4 book ai didi

在其他 JAR 中定义时未执行 Spring Aspect

转载 作者:行者123 更新时间:2023-12-03 23:35:15 29 4
gpt4 key购买 nike

我有一个由两个子项目组成的项目,它们都是 Spring 项目,每个都有一个 applicationContext.xml。

一个是框架项目(最终成为 JAR),一个是实际应用程序(最终成为 WAR,依赖于 JAR 并将 JAR 的 applicationContext.xml 导入它自己的 applicationContext.xml)。

在框架项目中,我为所有公共(public)方法定义了一个方面。

@Aspect
@Configurable
public class MyAspect {

@Autowired
private SomeBean mBean;

@Pointcut("execution(public * *(..))")
public void anyPublicMethod() {
}

@Before("anyPublicMethod()")
public void checkAuthorization(JoinPoint pJoinPoint) {
mBean.doSomething();
}
}

我已经在框架的applicationContext.xml中激活了AOP(由实际应用项目的applicationContext.xml导入)。
...
<context:spring-configured />

<context:component-scan base-package="com.mypackage" />

<aop:aspectj-autoproxy/>
...

在框架项目中进行测试时,方面会在调用 Spring bean 上的公共(public)方法时按预期执行。

如上所述,框架项目作为依赖项包含在应用程序项目中,但是当在任何 Spring bean 上调用应用程序项目中的匹配方法(任何公共(public))时,不会执行方面。

我也尝试过使用方面的 XML 配置。这导致相同的行为。

最佳答案

恕我直言,您可以稍微调整方法。

我要做的第一件事是将 war 的应用程序上下文的配置委托(delegate)给 web.xml :

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/spring*.xml</param-value>
</context-param>

其次,我会在你的war文件的应用程序上下文中启用aop,因为这是你想要使用它的地方。目前听起来,您使用 aop 配置导入应用程序上下文只是为了将其放入您的 Web 项目中,这可能是错误的。

最后我假设这些是运行时而不是编译的方面,在后一种情况下,无论依赖关系如何,您都需要在您的 war 项目中使用 aspectj 重新编译。

关于在其他 JAR 中定义时未执行 Spring Aspect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204374/

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