![](/img/trans.png)
[英]Are the Spring @PostConstruct and @PreDestroy method's annotations annotations a form of AOP?
[英]Using Spring @Lazy and @PostConstruct annotations
我有以下課程:
@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.創建第一個beanB。 創建bean B時,由於@Lazy
批注,字段a
將不會初始化。
2.創建下一個beanD。 然后method3()
將被執行,因為它已被@PostConstruct
標記,但是Spring尚未觸及method3()
。 因此,當將調用a.method1()時,Spring將創建bean A並將其注入到字段a
還是拋出NullPointerException
?
您需要了解,在指定@Lazy
作為注入的一部分時發生了什么。 根據文件 :
除了用於組件初始化的作用外,
@Lazy
批注還可以放置在標有@Autowired
或@Inject
注入點上 。 在這種情況下,它導致注入了 惰性解析代理。
這意味着在啟動時,Spring將注入代理類的實例而不是A
類的實例。 代理類是自動生成的類,具有與A
類相同的接口。 第一次調用任何方法時,代理將在自身內部創建類A
實例。 之后,所有方法調用將重定向到代理內部的A
類實例。
因此,沒有理由擔心任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.