我有一个简单的方面,如下面
@Aspect
public class PersistentAspect {
@AfterReturning("@annotation(org.aspect.PersistentOperation)")
public void log(JoinPoint jp) {
System.out.println("aspect call");
}
}
和下面的AppConfig
public class AppConfig {
private Integer num;
private String text;
public Integer getNum() {
return num;
}
@PersistentOperation
public void setNum(Integer num) {
this.num = num;
}
public String getText() {
return text;
}
@PersistentOperation
public void setText(String text) {
this.text = text;
}
}
配置类如下
@EnableWs
@Configuration
public class WsConfig extends WsConfigurerAdapter {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
AppConfig config = config();
interceptors.add(new CustomValidatingInterceptor(schema(), null));
}
@Bean
public AppConfig config() {
AppConfig config = null;
config = new AppConfig();
return config;
}
@Bean
public PersistentAspect persistentAspect() {
PersistentAspect persistentAspect = new PersistentAspect();
return persistentAspect;
}
}
如果我在addInterceptors
AppConfig config = config();
Aspect
不起作用。我有一个明显的解决方案是将代码更改为
AppConfig config = new AppConfig();
现在我想了解的是,是否存在AppConfig config = config();
仍然有效的配置。我假设当spring启动Bean时,它可以创建AppConfig
的AOP代理,当我启动bean时,它会以某种方式干扰该进程。什么是弹簧/弹簧引导方式处理这个?
以下是pom.xml
,所以基本上是最新的Spring 5.0.5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
修改-1
在发布之前,我已经添加了@EnableAspectJAutoProxy
,但这没有帮助。
尝试此问题的git repo位于下方
答案 0 :(得分:0)
您的AppConfig
bean(使用注释为@Bean
的方法正确初始化)需要包装在代理中,然后执行方面逻辑。
您必须通过向WsConfig
课程添加@EnableAspectJAutoProxy
注释来启用此行为。
顺便说一下:使用
是完全正确的AppConfig config = config();
在您的addInterceptors
方法中。 Spring将返回由config
方法创建的bean。