Внедрить бин в объект AspectJ перед его использованием - PullRequest
0 голосов
/ 29 марта 2019

Я использую aspectj aop внутри приложения весенней загрузки, поскольку мы знаем, что объект Aspectj можно получить, вызвав Aspects.aspectOf(MyAspect.class). Внутри MyAspect.class есть зависимость Foo, поэтому я установил поле следующим образом.

@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;
}

Мои проблемы в том, что инициализация bean-компонента Foo слишком поздняя, ​​логика в другом 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 голосов
/ 31 марта 2019

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

Spring зависимость от будет делать свое дело, каждый объект управляется пружиной, кроме MyAspectj, поэтому я мог бы использовать зависящий от Bean, который будет использовать MyAspect.

...