Spring踩坑日記(一):Spring Ioc容器

1.爲什麼使用ApplicationContext的對象無法調用registerShutdownHook()方法?

registerShutdownHook()方法用於在非Web容器中銷燬對象,而它是AbstractApplicationContext中的一個鉤子方法,只能通過AbstractApplicationFactory類對象調用。ApplicationContext是一個接口,AbstractApplicationFactory是一個抽象類,AbstractApplicationFactory實現了一個繼承自ApplicationFactory的接口(本沒有實現ApplicationFactory本身)。

PS:鉤子方法,是對於抽象方法或者接口中定義的方法的一個空實現

2.在XML中配置了destroy-method,爲什麼在調用了registerShutdownHook()之後沒有執行?

當使用 init-method 和 destroy-method 的時候,使用 prototype 時 Spring 不會負責銷燬容器對象,即 Spring 不會調用 destroy-method 所指定的方法,所以需要去掉 scope 屬性,使用默認的 singleton

3.Spring Bean 後置處理器:BeanPostProcessor

BeanPostProcessor是一個接口,且提供了方法的默認實現,我們可以重寫方法的實現來提供每一個Bean的加載邏輯,方法原型爲:

  /* 實例化之後進行處理 */
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    /* 實例化之前進行處理 */
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

小結:init-method,destroy-method,BeanPostProcessor類方法都是和Bean相對應的,沒當有一個Bean加載或銷燬時,都會調用相關的方法。需要注意的是:1.在scope爲singleton時,destory-method方法不會被調用;2.BeanPostProcessor的兩個方法分別在init-method之前和之後調用。3.init-method方法在屬性注入完成後調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章