其中BeanPostProcessor的前置和后置处理的方法中都要返回该bean,不能是null,不然在getBean的时候获取不到。
public interface PasswordDecodable{ public String getEncodedPassword(); public void setDecodedPassword(String password);}
public class LoginModel implements PasswordDecodable{ private String password; public LoginModel() { } public LoginModel(String password) { this.password = password; } @Override public String getEncodedPassword() { // TODO Auto-generated method stub return this.password; } @Override public void setDecodedPassword(String password) { // TODO Auto-generated method stub this.password = password; }}
import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import com.uqee.spring.beans.PasswordDecodable;import com.uqee.utils.Md5Token;public class PasswordDecodePostProcessor implements BeanPostProcessor{ @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub if(bean instanceof PasswordDecodable) { String encodedPassword = ((PasswordDecodable)bean).getEncodedPassword(); String decodePassword = decodePassword(encodedPassword); ((PasswordDecodable)bean).setDecodedPassword(decodePassword); } return bean; } private String decodePassword(String encodePassword) { return Md5Token.getInstance().getLongToken(encodePassword); }}
demo
PasswordDecodePostProcessor的postProcessAfterInitialization和postProcessBeforeInitialization均不能返回null,不然下列代码:
ConfigurableListableBeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext3.xml")); factory.addBeanPostProcessor(new PasswordDecodePostProcessor()); PasswordDecodable passwordDecodable = (PasswordDecodable)factory.getBean("loginModel");
中passwordDecodable会是null引用。