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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值