1. 程式人生 > >Spring原始碼窺探之:Spring IOC之BeanPostProcessor

Spring原始碼窺探之:Spring IOC之BeanPostProcessor

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方法執行。。。。。。