bean的定義——bean的初始化——bean的使用——bean的銷毀
bean 是 spring 裝配的元件模型,一切實體類都可以配置成一個 bean ,進而就可以在任何其他的 bean 中使用,一個 bean 也可以不是指定的實體類,這就是抽象 bean 。
spring中bean的初始化回調有兩種方法
一種是在配置檔案中聲明init-method="init",然後在一個實體類中用init()方法來初始化
另一種是實作initializingbean接口,覆寫afterpropertiesset()方法。
第一種:
配置檔案:
beaninitdemo1類:
測試類:
運作結果:
這裡是init()方法初始化設值
原因:init()初始化方法的調用是在配置檔案的bean初始化之後執行的, 是以改變了配置檔案中對message的指派。
第二種:
編寫beaninitdemo2類,使其實作initializingbean接口
測試:
運作結果: 這裡覆寫了initializingbean接口的afterpropertiesset()方法設值
原因相同,afterpropertiesset()方法在配置檔案的bean初始化後執行,是以改變了配置檔案中對message的指派
spring中有兩種使用bean的方法:
1, beanfactory:
beanfactory factory= new xmlbeanfactory(new classpathresource("bean.xml"));
factory.getbean("student");
beanfactory是延遲加載,如果bean的某一個屬性沒有注入,beanfacotry加載後,直至第一次使用getbean方法才會抛出異常,也就是說當使用beanfactory執行個體化對象時,配置的bean不會馬上被執行個體化。當你使用該bean時才會被執行個體化(getbean)。
2, applicationcontext:
applicationcontext ac = new classpathxmlapplicationcontext("bean.xml");
如果使用applicationcontext,則配置的bean如果是singleton不管你用還是不用,都被執行個體化。applicationcontext在初始化自身時檢驗,這樣有利于檢查所依賴屬性是否注入。applicationcontext是beanfactory的子類,除了具有beanfactory的所有功能外還提供了更完整的架構功能,例如國際化,資源通路等。是以通常情況下我們選擇使用applicationcontext。
bean的銷毀和初始化一樣,都是提供了兩個方法
一是在配置檔案中聲明destroy-method="cleanup",然後在類中寫一個cleanup()方法銷毀
二是實作disposablebean接口,覆寫destory()方法
beandestorydemo1類:
測試:
context.registershutdownhook()是為spring注冊關閉吊鈎,程式退出之前關閉spring容器,如果沒有context.registershutdownhook();将不會執行cleanup()方法。
beandestorydemo2類:
spring可以管理singleton作用域(預設的)的bean的生命周期,是以在bean初始化及銷毀之前可以做一些工作,更靈活的管理bean。