1. 概述
默認情況下,Spring會在應用程序上下文的啓動時創建所有單例bean。這背後的原因很簡單:立即避免和檢測所有可能的錯誤,而不是在運行時。但是,有些情況下我們需要創建一個bean,而不是在應用程序上下文啓動時,而是在我們請求時。就需要用到@Lazy來進行懶加載。
懶加載主要針對單實例bean。Spring默認在容器啓動的時候創建對象,而懶加載目的是爲了在容器啓動時候不創建對象,僅當第一次使用 (獲取) bean 的時候才創建並初始化。
2. 測試@lazy的作用
- 新增配置類Cap4MainConfig,不加@lazy
@Configuration
public class Cap4MainConfig {
@Bean
public Person person() {
System.out.println("給容器添加person");
return new Person("cap4", 15);
}
}
- 編寫測試類Cap4Test
public class Cap4Test {
@Test
public void test1() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Cap4MainConfig.class);
System.out.println("IOC容器創建完成");
Person person = (Person) context.getBean("person");
}
}
結果如下:
很明顯,不加@lazy的話,在容器創建完成前,person Bean已經創建並加入到容器當中。
下面修改配置加上@Lazy
@Configuration
public class Cap4MainConfig {
@Bean
@Lazy
public Person person() {
System.out.println("給容器添加person");
return new Person("cap4", 15);
}
}
結果如下:
可以發現,當IOC容器創建完全,person Bean還未創建,只有執行
Person person = (Person) context.getBean("person");
纔會創建person Bean並放入IOC容器中。