詳解Spring中Bean後置處理器(BeanPostProcessor)的使用

一、BeanPostProcessor接口

Bean後置處理:對Spring 工廠創建的對象進行二次加工處理,即預初始化和後初始化。

PostProcessor中文意思就是後置處理器。

BeanPostProcessor 接口也被稱為Bean後置處理器,通過該接口可以自定義調用初始化前後執行的操作方法。

該接口中包含瞭兩個方法:before方法(預初始化)和after方法(後廚是化)

postProcessBeforeInitialization() 方法:在 Bean 實例化、屬性註入後,初始化前調用。

postProcessAfterInitialization() 方法:在 Bean 實例化、屬性註入、初始化都完成後調用。

二、案例

創建User類,為瞭更好的觀察bean周期執行流程,在類中添加無參構造器方法setter註入方法init()初始化方法destory()銷毀方法,並在方法中都輸出一句話。代碼如下

/**
 * 觀察bean周期執行流程
 */
public class User {
    String name;
    int age;

    //無參構造方法
    public User() {
        System.out.println("這是無參構造方法");
    }

    //setter方法
    public void setName(String name) {
        System.out.println("這是setter註入name");
        this.name = name;
    }

    public void setAge(int age) {
        System.out.println("這是setter註入age");
        this.age = age;
    }

    //初始化回調方法
    public void init() throws Exception {
        System.out.println("這是初始化回調方法");
    }

    //銷毀回調方法
    public void destroy() throws Exception {
        System.out.println("這是銷毀回調方法");
    }

    //toString方法
    @Override
    public String toString() {
        return "User{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
}

創建PostProcessor類,實現BeanPostProcessor接口,並重寫預初始化方法postProcessBeforeInitialization()和後初始化方法postProcessAfterInitialization()

/**
 * Spring Bean後置處理器
 */
public class PostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName+"正在執行預初始化方法");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName+"正在執行後初始化方法");
        return bean;
    }
}

編寫spring配置文件,添加bean

<!--添加user bean-->
<bean id="user" class="com.bighorn.pojo.User" init-method="init" destroy-method="destroy">
    <property name="name" value="bighorn"/>
    <property name="age" value="18"/>
</bean>
<!-- 註冊後置處理器 -->
<bean id="postProcessor" class="com.bighorn.config.PostProcessor"/>

編寫運行程序

    public static void main(String[] args) {
        //獲取 ClassPathXmlApplicationContext 容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //從容器中獲取對象
        User user = context.getBean("user", User.class);
        //使用bean
        System.out.println("使用bean:"+user);
        //調用close方法關閉容器
        context.close();
    }

運行結果如下,通過結果我們可以清晰地看到bean生命周期執行流程。

三、總結

實際開發中,spring bean初始化操作比較少,一般采用後置處理器加工bean。

後置處理器有兩個方法:before和after方法。推薦使用after方法,即後初始化方法。

到此這篇關於詳解Spring中Bean後置處理器(BeanPostProcessor)的使用的文章就介紹到這瞭,更多相關SpringBean後置處理器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: