Spring原始碼窺探之:Spring IOC之BeanPostProcessor
阿新 • • 發佈:2018-11-08
Spring的Bean後置處理器
1. 實體類
/** * @author 70KG * @Title: Train * @Description: * @date 2018/7/23下午11:31 * @From www.nmyswls.com */ public class Train { public Train() { System.out.println("Train構造方法執行。。。。。。"); } public void init() { System.out.println("Train的init方法執行。。。。。。"); }public void destroy() { System.out.println("Train的destroy方法執行。。。。。。"); } }
2. 配置類
⚠️加上對實現類的掃描
/** * @author 70KG * @Title: config * @Description: * @date 2018/7/23下午11:31 * @From www.nmyswls.com */ @Configuration @ComponentScan("com.nmys.story.springCore.springioc.beanpostprocessor_")public class Config01 { @Bean(initMethod = "init",destroyMethod = "destroy") public Train train(){ return new Train(); } }
3. BeanPostProcessor的實現類
⚠️加上@Component註解,目的為了讓spring來管理這個實現類
/** * @author 70KG * @Title: BeanPostProcessorImpl * @Description: bean的後置處理器 * @date 2018/7/23下午11:31 * @From www.nmyswls.com*/ @Component public class BeanPostProcessorImpl implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // 返回一個傳過來的物件 // 在初始化方法呼叫之前進行後置處理工作 // 什麼時候呼叫呢?在init-method方法之前就呼叫了 System.out.println("postProcessBeforeInitialization======" + beanName + "======" + bean); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessAfterInitialization======" + beanName + "======" + bean); return bean; } }
4. 測試
/** * @author 70KG * @Title: FutureTaskTest * @Description: * @date 2018/7/23下午11:31 * @From www.nmyswls.com */ public class Test01 { @Test public void test() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config01.class); ac.close(); } }
5. 結果
Train構造方法執行。。。。。。 postProcessBeforeInitialization======train======[email protected]9e7d1 Train的init方法執行。。。。。。 postProcessAfterInitialization======train======[email protected]9e7d1 Train的destroy方法執行。。。。。。