Я следующие классы:Использование Spring @Lazy и @PostConstruct аннотаций
@Repository
class A {
public void method1() {
...
}
}
@Component
class B implements C {
@Autowired
@Lazy
private A a;
public void method2() {
a.method1();
}
}
@Component
class D {
@Autowired
private List<C> c;
@PostConstruct
public void method3() {
// iterate on list c and call method2()
}
}
Давайте предположим Spring инициализирует бобы следующим образом:
1. Первый компонент Б создается. Когда bean B создается, поле a
не будет инициализировано из-за аннотации @Lazy
.
2. Создан следующий bean-элемент D. Затем method3()
будет выполнен, так как он отмечен @PostConstruct
, но фаза A еще не коснулась весны. Поэтому, когда будет вызван a.method1(), будет ли Spring создавать bean-компонент A и ввести его в поле a
или он будет кидать NullPointerException
?
Вы пытались запустить ту же настройку? – Arpit
@Arpit Да, я сделал, и он ввел А в. Но я не могу гарантировать, что Spring придет сначала к A или D. Если он сначала дойдет до A, он сможет ввести A в течение некоторого времени, выполняя метод3(). Если он сначала дойдет до D, тогда проблема может возникнуть. – rohanagarwal