Spring Bean後處理器

Spring Bean後處理器

Spring提供了兩類後處理器

1.Bean後處理器

2.容器後處理器

 

Spring的很多功能就是通過這些後處理來提供高質量的服務。而程序員只需要簡單幾部同樣可以自定義功能強大的後處理器,今天我們將簡述Bean後處理器

 

一、Bean後處理器

用來加強Spring容器中的bean處理。可以在bean在spring容器中初始化前後對bean進行自定義處理。

1.自定義一個自定義一個bean後處理器:

       public class MyBeanProcessor implements BeanPostProcessor{

               @Override

               public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {

                       System.out.println("bean:"+arg1+" after");

                       return arg0;

               }

               @Override

               public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException{

                      System.out.println("bean:"+arg1+" before");

                      return arg0;

               }

        }

Bean後處理器要求實現接口BeanPostProcessor

該接口要求實現的兩個方法:

       Object postProcessBeforeInitialization(Object object,String name)

              在bean初始化前Spring將回調該方法

              參數:object 被後處理的bean

                               name 被後處理bean的id

              返回:被處理後的bean

       Object postProcessAfterInitialization(Object object,String name)

              在bean初始化後Spring將回調該方法

              參數:object 被後處理的bean

                               name 被後處理bean的id

              返回:被處理後的bean

2.註冊bean後處理器到容器

       <!-- bean 後處理bean -->

<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

Spring在初始化bean過程中如果發現bean實現了BeanPostProcessor 接口,將會將其註冊爲bean後處理器,它對spring容器下的所有bean起作用,任何bean在 初始化過程都會通過bean後處理器做額外增強操作。

3.後處理器在Bean初始化過程中調用的時機



 

 

4.接下來我們做一個小demo

創造一個Persion Bean:

 

public class Persion{

        private String name;

        private int age;

        private char gender;

 

        public void work(){

                System.out.println(name+"working...");

        }

        public void init(){

                System.out.println("persion bean 被初始化");

        }

        //省略若干get&set 方法

}

註冊:

//聲明初始化方法爲init,在初始化進程始將被調用

<bean id="persion" class="cn.zhaoyuening.model.Persion" init-method="init"></bean>

創造Bean後處理器:



  

      註冊後Bean處理器:

      <!-- bean 後處理bean -->

      <bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

      在此沒有爲後處理bean設置id值,因爲當spring自動裝載所有bean時發現某個bean 實現了BeanPostProcessor 接口將自動註冊爲後處理bean。

但如果不自動裝載bean如使用(BeanFactory)需要設置id值,並手動註冊:

<bean class="cn.zhaoyuening.utils.MyBeanProcessor" id=”processor”></bean>

BeanPostProcessor processor = (BeanPostProcessor)baenFactory.getBean(“processor”);

beanFactory.addBeanPostProcessor(processor);

 

       執行:

private ApplicationContext beansContext = new ClassPathXmlApplicationContext("applicationContext.xml");

       @Test

       public void test() throws Exception {

               Persion persion = beansContext.getBean("persion",Persion.class);

               persion.work();

}

       結果:

bean:persion before #執行bean後處理器的postProcessBeforeInitialization方法

persion bean 被初始化 #Bean 初始化

bean:persion after  #執行bean後處理器的postProcessAfterInitialization方法

#執行persion bean的初始化方法,後處理器中設置name爲了buynow

buynow working... 

 

發佈了30 篇原創文章 · 獲贊 22 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章