[英]How getter work (Singleton Bean) in case, we inject prototype bean into singleton bean via aop scoped proxy?
[英]How to apply spring aop aspect on a prototype scoped bean
如何在原型作用域 bean 上应用 spring aop 方面
spring 方面是否不适用于原型作用域 bean? 我有一个带有几个构造函数参数的原型作用域 bean。 bean 在运行时使用这些参数进行实例化。
我的弹簧配置是这样的——
@Configuration
@EnableAspectJAutoProxy
public class SpringConfiguration {
@Bean
@Scope("prototype")
public PrototypeBean prototypeBean(SomeDTO dtoArg1, OtherDTO dtoArg2) {
return new PrototypeBean(dtoArg1, dtoArg2);
}
@Bean
public TestAspect testAspect() {
return new TestAspect();
}
}
我正在通过 applicationContext 在代码中获取 bean - PrototypeBean,就像这样 -
applicationContext.getBean(PrototypeBean.class, dtoArg1, dtoArg2);
但令人惊讶的是,该方面并未在调用原型 bean 的连接点方法时执行。 我确信我创建的切入点是正确的,因为在 eclipse 中,aspectJ 插件在 joinPoint 方法上显示了 aspectJ 引用的可视标记,这表明切入点是正确的,但不确定为什么它在运行时没有在运行时执行调用 PrototypeBean 的 joinpoint 方法。
我是否以不正确的方式接近容器以获取 bean 或容器没有机会在这个原型 bean 上编织建议?
感谢您对此提供任何帮助/建议。
我用 Spring Boot 2.3.4 尝试了同样的事情,它工作得很好。
这是回购。 确保您具有以下依赖项以使EnableAspectJAutoProxy
工作。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<scope>compile</scope>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.