在Bean被創建以及裝配後,BeanPostProcessor 接口爲你提供了二次機會來修改這個bean。
public interface BeanPostProcessor{
Object postProcessBeforeInitialization(Object bean, String name) throws BeansException;
Object postProcessAfterInitialization(Object bean, String name) throws BeansException;
}
public class Fuddifier implements BeanPostProcessor{
public Object postProcessAfterInitialization(Object bean, String name){
Field[] fileds = bean.getClass().getDeclaredFields();
try{
for(int i=0;i<fields.length;i++){
if(fileds[i].getType().equals(java.lang.String.class)){
fields[i].setAccessible(true);
String original = (String) fields[i].get(bean);
fields[i].set(bean, fuddify(original));
}
}
} catch(IllegalAccessException e){
e.printStackTrace();
}
return bean;
}
private String fuddify(String orig){
if(orig == null ) return orig;
return orig.replaceAll("(r|l)","w").replaceAll("(R|L)","W");
}
public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException{
return bean;
}
}
spring 還可以監聽事件和發佈事件,只需要實現相應的接口。