gpt4 book ai didi

java - Spring AspectJ loadtimeweaving 未调用

转载 作者:行者123 更新时间:2023-12-01 20:54:37 27 4
gpt4 key购买 nike

Spring AspectJ 加载时编织配置正在构建和加载服务器,没有任何错误,但方面没有被调用。

这是配置列表1)JDK 82)服务器 jetty

@Configuration
@ComponentScan(basePackages = {..})
@EnableSpringConfigured
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
@PropertySource(...)
@ImportResource(value = { "classpath:META-INF/aop.xml", ..})
class config {
...
}

aop.xml

<aspectj>     
<weaver options="-Xlint:ignore -Xset:weaveJavaPackages=true -Xset:weaveJavaxPackages=true">
<include within="com.proj.*"/>
<include within="java.*"/>
<include within="javax.*"/>
<include within="org.springframework.*"/>
<include within="org.aspectj.*"/>
</weaver>
<aspects>
<aspect name="com.proj.SampleAspect"/>
</aspects>
</aspectj>

还尝试过使用 aop.xml 中的选项

options="-XnoInline -verbose -showWeaveInfo -debug -Xlint:ignore -Xset:weaveJavaPackages=true -Xset:weaveJavaxPackages=true"

方面

@Component
@Aspect
public class SampleAspect {
@Autowired
private RequestContextFilter interceptRequestContext;

@Around("@annotation(ExecuteByContext)")
public Object interceptByContext(final ProceedingJoinPoint pjp) throws Throwable {
if(SampleUtil.applyForRequest(interceptRequestContext.getRequestContext()) {
LOGGER.info(String.format("Intercept context for method %s", pjp.getSignature().getName()));
return null;
}
return pjp.proceed();
}
}

注释

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExecuteByContext {

}

@Component
@Configurable
class TestClass implements ISomeInterface{

...
@ExecuteByContext
public void method() {
..
}

@ExecuteByContext
private void method1() {
..
}
}

Jetty 服务器使用 MAVEN_OPTS 设置启动

-javaagent:/path_to/.m2/repository/org/springframework/spring-instrument/4.2.0.RELEASE/spring-instrument-4.2.0.RELEASE.jar

我的 Maven 中有以下依赖项

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
</dependency>

SampleAspect 未被调用。我有几个用 @ExecuteByContext 注释的方法(公共(public)、私有(private)和 protected )。

最佳答案

您的目标类可能不直接位于包 com.proj 中,而是位于子包中。包含子包的语法是 ..*,而不是简单的 .*,即在您的 aop.xml 中,您应该有

<include within="com.proj..*"/>

等等。

关于java - Spring AspectJ loadtimeweaving 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559468/

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