这回我们用个例子来说说bean的生命周期
bean的生命周期就是bean的创建---初始化---销毁的过程
容器管理bean的生命周期,可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法
我们先来创建实体类Car.Class,定义初始化init方法,打印输出,再定义销毁destroy
package springorgin.demo.configbean;
public class Car {
public Car() {
System.out.println("car constructor...");
}
public void init() {
System.out.println("car init....");
}
public void destory() {
System.out.println("car destory....");
}
}
创建配置类ConfigBeanCycle.Class,给bean配置初始化要调用的方法和销毁的时候调用方法
@Configuration
public class ConfigBeanCycle {
@Bean(initMethod = "init", destroyMethod = "destory")
public Car car() {
return new Car();
}
}
为什么写bean里呢,我们在最原始的spring.xml里也是配置bean属性里的

添加测试类,运行
public static void main(String[] args) {
// 创建IOC容器
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ConfigBeanCycle.class);
System.out.println("容器创建完成......");
context.getBean("car");
}
我们发现初始化方法已经打印好了,那么销毁呢

销毁需要我们调用容器销毁的接口,才会想要进入destory方法,测试类添加 context.close();
public static void main(String[] args) {
// 创建IOC容器
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ConfigBeanCycle.class);
System.out.println("容器创建完成......");
context.getBean("car");
// 什么时候销毁呢,当然是在容器关闭的时候啊
context.close();
}
运行测试类

当然这是bean默认是单例的情况下会有销毁情况,当bean为多例的情况下,销毁的功能就不需要spring去做了,spring只负责容器的创建不负责多例的对象的销毁,我们来示例看一下
@Configuration
public class ConfigBeanCycle {
// Scope("prototype")多例的情况下就不会调用初始化和销毁的方法,只有调用获取bean的时候才调用,而且调用多次是不同的bean
@Scope("prototype")
@Bean(initMethod = "init", destroyMethod = "destory")
public Car car() {
return new Car();
}
}
在运行测试类,发现没有被销毁

总结一下
bean的生命周期:
就是bean的创建---初始化---销毁的过程
容器管理bean的生命周期,可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法
构造(对象创建)时机:
单实例:在容器启动的时候创建对象
多实例:在每次获取的时候创建对象
初始化时机:
对象创建完成,并赋值好,调用初始化方法。。。
销毁:
单实例才在容器关闭的时候销毁
··多实例,不进行销毁,容器只管创建,不管销毁
7671

被折叠的 条评论
为什么被折叠?



