У меня есть следующие классы:
@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 инициализирует bean-компоненты следующим образом:
1. Создается первый bean-компонент B. При создании компонента B поле a
не будет инициализировано из-за аннотации @Lazy
.
2. Создается следующий компонент D. Затем будет выполнен method3()
, поскольку он помечен @PostConstruct
, но компонент A еще не затронут Spring. Итак, когда будет вызываться a.method1(), Spring создаст bean-компонент A и вставит его в поле a
или выдаст NullPointerException
?