天天看點

使用BeanPostProcessor實作依賴注入的修正器

如果我們想對一個bean的所有String類型的屬性注入設定一個修正器,使其所有的注入内容均轉換成大寫,我們可以借助與Spring提供的 BeanPostProcessor接口

首先定義一個類,實作BeanPostProcessor接口,完成注入屬性的大小寫轉換

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

public   class  UppercassModifier  implements  BeanPostProcessor ... {

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

    public Object postProcessBeforeInitialization(Object bean,String name) throws BeansException...{

使用BeanPostProcessor實作依賴注入的修正器

       //取得bean的field成員

使用BeanPostProcessor實作依賴注入的修正器

       Field[] fields=bean.getClass().getDeclaredFields();

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

       for(int i=0;i<fields.lengtj;i++)...{

使用BeanPostProcessor實作依賴注入的修正器

          //針對string類型的field成員加以修正

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

          if(fields[i].getType().equals(String.class))...{

使用BeanPostProcessor實作依賴注入的修正器

              fiels[i].setAccessible(true);

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

              try...{

使用BeanPostProcessor實作依賴注入的修正器

                   String orginal=(String)field[i].get(bean);

使用BeanPostProcessor實作依賴注入的修正器

                   field[i].set(bean,orginal.toUpperCase());

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

              }catch(Exception e)...{

使用BeanPostProcessor實作依賴注入的修正器

              }

使用BeanPostProcessor實作依賴注入的修正器

          }

使用BeanPostProcessor實作依賴注入的修正器

       }

使用BeanPostProcessor實作依賴注入的修正器

      return bean;

使用BeanPostProcessor實作依賴注入的修正器

    }

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

}

spring bean

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

public   class  HelloBean ... {

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

   private String helloworld;

使用BeanPostProcessor實作依賴注入的修正器

   setter/getter方法

使用BeanPostProcessor實作依賴注入的修正器

}

配置檔案

使用BeanPostProcessor實作依賴注入的修正器

< bean  id ="uppercaseModifier"  class ="demo.UppercaseModifier" />

使用BeanPostProcessor實作依賴注入的修正器
使用BeanPostProcessor實作依賴注入的修正器

< bean  id ="helloBean"  class ="demo.HelloBean" >

使用BeanPostProcessor實作依賴注入的修正器

    < property  name ="helloworld"  value ="Hello" />

使用BeanPostProcessor實作依賴注入的修正器

</ bean >

測試後,注入的Hello會自動轉換成HELO