繁体   English   中英

如何在原型作用域 bean 上应用 spring aop 方面

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM