Spring註解驅動開發02(作用域和懶載入)
阿新 • • 發佈:2020-08-19
Spring中bean的作用域
預設情況下,Spring只為每個在IOC容器裡宣告的bean建立唯一一個例項,整個IOC容器範圍內都能共享該例項:所有後續的getBean()呼叫和bean引用都將返回這個唯一的bean例項。該作用域被稱為singleton,它是所有bean的預設作用域。
在Spring中使用@Scope
註解來設定bean的作用域
- 不設定作用域時,兩個getBean的列印結果
com.atguigu.pojo.Person@76508ed1
com.atguigu.pojo.Person@76508ed1
- 設定多例項作用域
@Bean @Scope("prototype") //singleton預設, 改為多例項prototype public Person person(){ return new Person(); }
列印結果
com.atguigu.pojo.Person@76508ed1
com.atguigu.pojo.Person@41e36e46
懶載入@Lazy
註解(只適用於單例項bean)
預設ioc容器啟動的時候就建立bean物件
try (ConfigurableApplicationContext ioc = new AnnotationConfigApplicationContext(MainConfig.class)) { // Person bean = ioc.getBean(Person.class); // Person bean2 = ioc.getBean(Person.class); }
列印結果
建立bean
在bean物件上加上@Lazy
懶載入後
@Bean
@Lazy
public Person person(){
return new Person();
}
列印結果
//沒有getBean時,無列印
//getBean
建立bean
com.atguigu.pojo.Person@50a638b5
com.atguigu.pojo.Person@50a638b5