Spring IoC (ApplicationContext) 容器一般都會在啓動的時候實例化所有單實例 bean 。如果我們想要 Spring 在啓動的時候延遲加載 bean,即在調用某個 bean 的時候再去初始化,那麼就可以使用 @Lazy 註解。
@Lazy 的屬性
value 取值有 true 和 false 兩個 默認值爲 true
true 表示使用 延遲加載, false 表示不使用,false 純屬多餘,如果不使用,不標註該註解就可以了。
Person 類
public class Person {
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
System.out.println(" 對象被創建了.............");
this.name = name;
this.age = age;
}
// 省略 getter setter 和 toString 方法
}
配置類 不標註 @Lazy 註解
public class LazyConfig {
@Bean
public Person person() {
return new Person("李四", 55);
}
}
測試
@Test
public void test5() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(LazyConfig.class);
}
不獲取 bean , 看控制檯是否會打印。如果有打印,代表調用了構造器。
結果
在配置類打上 @Lazy 註解
public class LazyConfig {
@Lazy
@Bean
public Person person() {
return new Person("李四", 55);
}
}
再來看輸出結果
T
沒有打印語句,對象沒有調用構造器,那麼方法也就沒有被創建。
@Lazy(value = false) 或者 @Lazy(false) 那麼對象會在初始化的時候被創建
@Lazy註解註解的作用主要是減少springIOC容器啓動的加載時間
當出現循環依賴時,也可以添加@Lazy