在使用AspectJ对象之前将其注入

时间:2019-03-29 10:13:24

标签: spring aop aspectj

我在Spring Boot应用程序中使用Aspectj aop,因为我们知道可以通过调用Aspects.aspectOf(MyAspect.class)获得Aspectj对象。 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?

1 个答案:

答案 0 :(得分:0)

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

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