【问题标题】:Inject bean inside AspectJ object before using it在使用之前在 AspectJ 对象中注入 bean
【发布时间】:2019-03-29 10:13:24
【问题描述】:

我在 spring boot 应用程序中使用 aspectj aop,因为我们知道 Aspectj 对象可以通过调用 Aspects.aspectOf(MyAspect.class) 来获取。 Foo 内部有一个依赖关系 MyAspect.class ,所以我按以下方式设置字段。

@Aspectj
public class MyAspect{
   private Foo foo ;

   public void setFoo(Foo foo){
     this.foo = foo;
   }
}

@Bean
public Foo foo(){
   Foo foo = new Foo();
   MyAspectj myAspectj = Aspects.aspectOf(MyAspectj.class);
   myAspectj.setFoo(foo);
   return foo;
}

我的问题是,Foo bean 初始化为时已晚,其他 bean 中的逻辑已经开始运行并初始化了 MyAspectj。原来是NullPointException,因为没有Foo

   public void handler(EventMessage eventMessage) {
        JoinPoint var3 = Factory.makeJP(ajc$tjp_0, this, this, eventMessage);
        LoggerAspect var10000 = LoggerAspect.aspectOf();
        Object[] var5 = new Object[]{this, eventMessage, var3};
        var10000.loggerOut((new MessageHandler$AjcClosure3(var5)).linkClosureAndJoinPoint(69648));
    }

我的问题是,如何在使用任何代码之前正确初始化 MyAspectj.class ?

【问题讨论】:

    标签: spring aop aspectj


    【解决方案1】:

    https://www.baeldung.com/spring-depends-on

    Spring dependsOn 可以解决问题,除了 MyAspectj 之外,每个对象都由 spring 管理,所以我可以在 Bean 上使用 dependsOn ,它将使用 MyAspect

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 2021-11-06
      • 2021-04-24
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多