1. 程式人生 > >spring學習四

spring學習四

跟蹤 ssi ebe ner actor .com string set sso

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學習四