spring组件-----10

第12小节:bean的生命周期
bean的生命周期是指:bean的创建—bean的初始化——bean的销毁的过程
容器管理bean的生命周期:容器帮我们创建bean,初始化和销毁bean

我们可以自定义初始化和销毁方法,容器bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法

一共有4种方式:
1)指定初始化和销毁方法

以前在bean.xml中,在bean标签中可以通过添加属性:init-method=“” destroy-method=“” 指定其初始化和销毁方法

使用注解方式:

编写一个类,在其无参构造器中打印car constructor….,实现一个初始化方法,一个销毁方法
public class Car {
public Car(){
System.out.println(“car constructor…”);
}
public void init(){
System.out.println(“car…init…”);
}
public void detory(){
System.out.println(“car …detory…”);
}
}

将这个类添加到容器中:
编写一个配置类:MainConfigOfLifeCycle
@Configuration
public class MainConfigOfLifeCycle {
@Bean
public Car car(){
return new Car();
}
}
编写一个测试类:
public class IOCTest_LifeCycle {
@Test
public void test01(){
//创建ioc容器
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println(“容器创建完成。。。。。”);//当容器创建完成时,所有单实例的bean都会被创建出来
}
}
测试结果:
car constructor… ————创建实例时,该类的构造器被调用
容器创建完成。。。。。

构造(对象创建)
单实例:在容器启动的时候创建对象
多实例:在每次获取的时候创建对象

初始化:对象创建完成,并赋值好,调用初始化方法。。。。
销毁:单实例:容器关闭时
多实例:容器不会管理这个bean,容器不会调用销毁方法

告诉容器初始化方法和销毁方法的注解方式:
在@Bean标签中指定这两个方法:@Bean(initMethod = “init”,destroyMethod = “detory”)
@Configuration
public class MainConfigOfLifeCycle {
@Bean(initMethod = “init”,destroyMethod = “detory”)
public Car car(){
return new Car();
}
}

测试方法不变
测试结果:
car constructor…
car…init… ————— 创建实例后的初始化
容器创建完成。。。。。

那何时销毁呢? ——————容器关闭的时候销毁
在测试类中调用容器关闭的方法:applicationContext.close();
public void test01(){
//创建ioc容器
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println(“容器创建完成。。。。。”);//当容器创建完成时,所有单实例的bean都会被创建出来
applicationContext.close();
}

测试结果:
car constructor…
car…init…
容器创建完成。。。。。
六月 03, 2020 8:14:34 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@38cccef: startup date [Wed Jun 03 08:14:34 CST 2020]; root of context hierarchy
car …detory… ————容器关闭时执行销毁方法

测试多实例时销毁方法的执行时间:
销毁:单实例:容器关闭时
多实例:容器不会管理这个bean,容器不会调用销毁方法

在配置类中通过注解@Scope注解指定容器创建的实例为多实例:@Scope(“prototype”)
@Configuration
public class MainConfigOfLifeCycle {
@Scope(“prototype”)
@Bean(initMethod = “init”,destroyMethod = “detory”)
public Car car(){
return new Car();
}
}
测试类不变
@Test
public void test01(){
//创建ioc容器
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println(“容器创建完成。。。。。”);//当容器创建完成时,所有单实例的bean都会被创建出来
applicationContext.close();
}

测试结果:容器创建完成。。。。。

测试结果分析:初始化方法和销毁方法都没有执行,因为多实例bean只有在获取的时候才创建对象

现在在容器中获取一下该car的实例:applicationContext.getBean(“car”);
@Test
public void test01(){
//创建ioc容器
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println(“容器创建完成。。。。。”);//当容器创建完成时,所有单实例的bean都会被创建出来
applicationContext.getBean(“car”);
applicationContext.close();
}

测试结果:
容器创建完成。。。。。
car constructor…
car…init…

测试结果分析:当获取car实例时,会创建实例对象并进行初始化
不执行销毁——容器不管多实例的销毁
每次获取实例,ioc容器帮我们创建实例交给你,但是什么时候销毁是你自己的事,ioc容器不管理多实例bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值