bean的作用域
1.singleton,prototype, web環境下:request,session,gloab session
2.通過scope="" 來進行配置
3.對於singleton spring容器只會創建一個共享實例,prototype則會創建不同的實例
bean的生命周期(bean自身的方法,bean級生命周期接口方法,容器級生命周期接口方法)
分為BeanFactory的生命周期和ApplicationContext的生命周期
1、對於BeanFactory
1、當通過getBean調用某一個bean的時候,首先看容器是否注冊(不是bean實現接口,屬於容器級生命周期方法)了InstantiationAwareBeanPostProcessor接口,如果注冊了,將會調用postProcessBeforeInstantiation()方法。
2、然后實例化bean
3、調用InstantiationAwareBeanPostProcessor接口的postProcessAfterInstantiation()方法
4、設置屬性,調用setter()
5、調用BeanNameAware的setBeanName()方法
6、調用BeanFactoryAware中的setBeanFactory()方法
7、調用InstantiationAwareBeanPostProcessor接口的postProcessBeforeInitialization()方法
8、 如果容器注冊了BeanPostProcessor接口,調用該接口的postProcessBeforeInitialization()方法
9、調用InitializingBean接口的afterPropertiesSet()方法
10、調用init-method屬性配置的方法
11、調用InstantiationAwareBeanPostProcessor接口的postProcessAfterInitialization()方法
12、調用BeanPostProcessor接口的postProcessAfterInitialization()方法
13、如果bean是單例的則把bean實例存入緩沖池由Spring容器繼續關系bean的生命周期,否則交由該bean的調用則管理
14、調用DisposableBean接口的方法
15、通過destory-method屬性配置的方法
要往ioc容器手動添加BeanPostProcessor的實現類 (ConfigurableBeanFactory)bf.addBeanPostProcessor(new MyBeanPostProcessor());
ApplicationContext中bean的生命周期和BeanFactoty的基本相同,在BeanFactoryAware接口后增加了一個 ApplicationContextAware接口的setApplicationContext()方法。