1.8、spring源碼,bean的生命週期

bean的生命週期:指bean創建-----初始化----銷燬  的過程

bean的生命週期是由容器進行管理的

我們可以自定義 bean初始化和銷燬 方法: 容器在bean進行到當前生命週期的時候, 來調用自定義的初始化和銷燬方法

第一種方法:

首先在bean上加上init和destory方法

public class Bike {

    public Bike(){
        System.out.println("構造--------");
    }
    public void init(){
        System.out.println("init-------");
    }
    public void destory(){
        System.out.println("destory-------");
    }
}

如果是使用bean.xml配置bean的

<bean id="person" class="cn.enjoy.bean.Bike" init-method="init" destroy-method="destory">
</bean>

啓動類:

注意:bean單實例: 當容器關閉(app.close)的時候,會調用destroy消耗,但是如果bean是多實例: 容器只負責初始化,但不會管理bean, 容器關閉不會調用銷燬方法

關於設置bean單例和多例,參考1.4、@scope註解單例和多例,驗證默認是單例

public class DemoApp {
    public static void main(String[] args){
        ClassPathXmlApplicationContext app = 
new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("IOC容器初始化完成");
        app.close();
    }
}

打印結果

構造--------
init-------
IOC容器初始化完成
destory-------

第二種方法,在配置類中直接配置

@Configuration
public class DemoConfig {
    @Bean(initMethod = "init",destroyMethod = "destory")
    public Bike bike(){
        return new Bike();
    }
}

啓動類

public class DemoApp {
    public static void main(String[] args){
        AnnotationConfigApplicationContext app = 
new AnnotationConfigApplicationContext(DemoConfig.class);
        System.out.println("IOC容器初始化完成");
        app.close();
    }
}

第三種方法,實現InitializingBean, DisposableBean

public class Car implements InitializingBean, DisposableBean {
    public Car(){
        System.out.println("car-------------constroctor");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("car-------------DisposableBean");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("car-------------InitializingBean");
    }
}

執行結果

car constro------
InitializingBean
IOC容器初始化完成
DisposableBean

第四種方法:@PostConstruct和@PreDestroy

public class Fly{
    public Fly(){
        System.out.println("Fly-------------constroctor");
    }
    @PostConstruct
    public void postConstruct() throws Exception {
        System.out.println("Fly-------------PostConstruct");
    }

    @PreDestroy
    public void destory() throws Exception {
        System.out.println("Fly-------------PreDestroy");
    }
}

結果和第三種的效果是相同的

Fly-------------constroctor
Fly-------------PostConstruct
IOC容器初始化完成
Fly-------------PreDestroy

 

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