spring學習四
1: InitializingBean vs init-method
InitializingBean 是一個接口,有一個方法afterPropertiesSet,不建議使用;因為InitializingBean是Spring接口,這樣導致 bean和spring耦合到一起了。
<bean id="SimpleBean1" class="com.SimpleBean" init-method="init" destroy-method="cleanUp >
<property name="name" value="Bill"></property>
<property name="age" value="19"></property>
</bean>
DisposableBean接口 destroy() ,一般用destory-method替代
2:ApplicaitonContextAware , BeanNameAware接口, BeanFactoryAware
ApplicaitonContextAware :setApplicationContext() 可以讓bean獲取context信息。
BeanNameAware: 可以讓bean獲得bean的name.
BeanFactoryAware : bean感知beanfactory接口
3: Spring中註入map的key必須是String類型。
4:bean的生命周期:
(1) Spring實例化bean.
(2) 利用依賴註入來配置bean中所有的屬性值。
(3) beanNameAware, setBeanName
(4) BeanFactoryAware, setBeanFacetory()
(5) ApplicationContextAware, setApplicationContext(), 當前ApplicationContext實例的引用。
(6) BeanPostProcessor, posProcessBeforeINnitalzation()
(7) InitializingBean, posProcessAfterINitialization()
到這為止,bean就可以被用了,
(8) DisposableBean, destroy()
(9) destroy-method, 定義銷毀bean的方法。
5: bean的作用域:
scope = "singleton"(默認)
prototype: 每一次請求(將其註入到另一個bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的bean實例,相當於一個new的操作。
request:request表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效,配置實例:
<web-app>...<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>...</web-app>
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
session: 和request類似
global session:
其中比較常用的是singleton和prototype兩種作用域。對於singleton作用域的Bean,每次請求該Bean都將獲得相同的實例。容器負責跟蹤Bean實例的狀態,負責維護Bean實例的生命周期行為;如果一個Bean被設置成prototype作用域,程序每次請求該id的Bean,Spring都會新建一個Bean實例,然後返回給程序。在這種情況下,Spring容器僅僅使用new 關鍵字創建Bean實例,一旦創建成功,容器不在跟蹤實例,也不會維護Bean實例的狀態。
spring學習四