package com.lei.study_09_15.processor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; /** * 后置处理器 * * @author LeiLei * @date 2019/9/15 */ public class MyPostProcessor implements BeanPostProcessor { /** * afterPropertiesSet、init执行之前执行 * * @param bean 当前组件 * @param beanName 当前组件ID * @return 当前组件(可进行包装) * @throws BeansException */ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+">>>>>MyPostProcessor.postProcessBeforeInitialization"); return bean; } /** * afterPropertiesSet、init执行之后执行 * * @param bean 当前组件 * @param beanName 当前组件ID * @return 当前组件(可进行包装) * @throws BeansException */ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+">>>>>MyPostProcessor.postProcessAfterInitialization"); return bean; } }
package com.lei.study_09_15.bean; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; /** * * * @author LeiLei * @date 2019/9/15 */ public class Cat implements InitializingBean,DisposableBean { public Cat() { System.out.println("Cat.Cat"); } public void destroy() throws Exception { System.out.println("Cat.destroy"); } /** * 相当于init方法 * @throws Exception */ public void afterPropertiesSet() throws Exception { System.out.println("Cat.afterPropertiesSet"); } }
@Configuration @Import({Cat.class, MyPostProcessor.class}) public class BeanConfigLifeCycle { }
执行结果:
Cat.Cat(构造器)
com.lei.study_09_15.bean.Cat>>>>>MyPostProcessor.postProcessBeforeInitialization(init之前)
Cat.afterPropertiesSet(init)
Cat.destroy(destory)
总结:
1.PostProcessor是接口,定义后作用于为整个IOC容器的所有组件
2.PostProcessor实现类需要装配到IOC容器中,否则无效
3.postProcessBeforeInitialization方法在init、afterPropertiesSet之前执行
4.postProcessAfterInitialization方法在init、afterPropertiesSet之后执行