Spring IoC (ApplicationContext) 容器一般都會在啓動的時候實例化所有單實例 bean 。如果我們想要 Spring 在啓動的時候延遲加載 bean,即在調用某個 bean 的時候再去初始化,那麼就可以使用 @Lazy 註解。
使用方法
直接在bean 上加註解
public class MainConfig {
//給aop容器註冊一個bean,類型爲返回值類型,默認bean id 是方法名,可以自定義
/**
* 主要針對單實例bean,默認容器啓動的時候創建對象
* 懶加載: 容器啓動的時候不創建對象,僅當第一次使用(獲取)bean的時候才創建被初始化
* @return
*/
//@Lazy
@Bean
public Person person(){
System.out.println("給容器中添加person........");
return new Person("JJJ",12);
}
}
不使用@Lazy註解時測試類
public class TestCap4 {
@Test
public void test01(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println("IOC容器創建完成.....");
applicationContext.getBean("person");
}
}
測試結果:容器啓動時類已加載完成
使用@Lazy註解後
public class MainConfig {
//給aop容器註冊一個bean,類型爲返回值類型,默認bean id 是方法名,可以自定義
/**
* 主要針對單實例bean,默認容器啓動的時候創建對象
* 懶加載: 容器啓動的時候不創建對象,僅當第一次使用(獲取)bean的時候才創建被初始化
* @return
*/
@Lazy
@Bean
public Person person(){
System.out.println("給容器中添加person........");
return new Person("JJJ",12);
}
}
測試結果:容器啓動的時候未創建對象,在獲取bean時,Person類才被加載,初始化
@Lazy註解的作用主要是減少springIOC容器啓動的加載時間
當出現循環依賴時,也可以添加@Lazy