轉載地址:http://developer.51cto.com/art/201104/255961.htm
spring的產生bean對象
在spring中,從BeanFactory或ApplicationContext取得的實例爲Singleton,也就是預設爲每一個Bean的別名只能維持一個實例,而不是每次都產生一個新的對象使用Singleton模式產生單一實例,對單線程的程序說並不會有什麼問題,但對於多線程的程序,就必須注意安全(Thread-safe)的議題,防止多個線程同時存取共享資源所引發的數據不同步問題。
通過ApplicationContext的方式獲取到bean對象的生命週期如下
1、當scope=singleton時,實例化(當程序加載applicationContext.xml文件),把我們的bean對象加載到內存中
2、調用set方法設置屬性(properaty)
3、BeanNameAware的setBeanName():如果你實現了bean名字關注接口(BeanNameAware)則,可以通過setBeanName獲取id號
4、BeanFactoryAware的BeanFactory():如果你實現了 bean工廠關注接口,(BeanFactoryAware),工廠調用setBeanFactory()方法傳入工廠自身
5、如果你實現了 ApplicationContextAware接口,則調用方法傳遞ApplicationContext
6、如果bean和一個後置關聯器有關,則會自動調用Object postProcessBeforeInitialization方法
7、如果實現InitializingBean 接口,就會調用afterPropertiesSet方法()
8、如果自己在<bean init-method=”init” /> 則可以在bean定義自己的初始化方法.
9、如果一個bean和後置關聯器有關,則會自動調用Object postProcessAfterInitialization方法
10、使用bean
11、容器關閉
12、可以通過實現DisposableBean 接口來調用方法 destory
13、可以在<bean destory-method=”fun1”/>調用定製的銷燬方法
通過工廠模式生成的bean對象的生命週期