Spring - 例項化與延遲例項化
阿新 • • 發佈:2021-08-09
目錄
- End -
﹀
﹀
﹀
夢想是鹹魚
關注一下吧
以上為本篇文章的主要內容,希望大家多提意見,如果喜歡記得點個推薦哦
作者:夢想是鹹魚
出處:https://www.cnblogs.com/maggieq8324/
本文版權歸作者和部落格園共有,歡迎轉載,轉載時保留原作者和文章地址即可。
前言
上一章談論了模式註解宣告元件(Bean)的應用,這裡記錄下Spring例項化的一些細節。
例項化
- 通常我們通過@Component和@Autowired宣告、使用Bean
public class TestController {
@Autowired
private TestInter testInter;
}
public interface TestInter {
void sayHello();
}
@Component public class TestOne implements TestInter { public TestOne () { System.out.println("TestOne init"); } @Override public void sayHello() { System.out.println("Hello TestOne"); } }
- 可以看出,預設機制下,應用程式啟動時IOC容器就開始例項化物件。
忽略當前要注入的bean
- 當我們注入一個並沒有例項化的物件。
//@Component
public class TestOne implements TestInter {
public TestOne () {
System.out.println("TestOne init");
}
}
public class TestController {
@Autowired
private TestInter testInter;
}
- 此時程式丟擲異常
- @Autowired(required = false) 忽略當前要注入的bean
public class TestController {
@Autowired(required = false)
private TestInter testInter;
}
- 可看出,程式正常啟動
@Lazy 延遲例項化
- 通過@Lazy註解讓Bean延遲例項化
public class TestController { @Autowired @Lazy private TestInter testInter; @GetMapping(value = "/test") public void test(){ testInter.sayHello(); } }
@Component
@Lazy
public class TestOne implements TestInter {
public TestOne () {
System.out.println("TestOne init");
}
@Override
public void sayHello() {
System.out.println("Hello TestOne");
}
}