Spring注解驱动开发——生命周期 @Bean 指定初始化方法和销毁方法
Bean的生命周期,
bean创建-----初始化------销毁的过程
容器管理bean的生命周期;
我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法
单实例:在容器启动的时候创建对象
多实例:在每次获取的时候创建对象
初始化:
对象创建完成,并赋值好,调用这个初始化方法。。。。。。
销毁:
单实例:容器关闭的时候
多实例:容器不是管理这个bean,容器不会调用销毁方法;
一 、指定初始化和销毁方法;指定init-method和destory-method
car 实体类
package com.mongoubiubiu.bean; 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......."); } }
配置类 用@Bean 注解将car 注入到容器中
package com.mongoubiubiu.conf; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import com.mongoubiubiu.bean.Car; import com.mongoubiubiu.bean.Person; /** * Bean的生命周期, * bean创建-----初始化------销毁的过程 * 容器管理bean的生命周期; * 我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 * * 单实例:在容器启动的时候创建对象 * 多实例:在每次获取的时候创建对象 * * 初始化: * 对象创建完成,并赋值好,调用这个初始化方法。。。。。。 * * 销毁: * 单实例:容器关闭的时候 * 多实例:容器不是管理这个bean,容器不会调用销毁方法; * * * 1)、指定初始化和销毁方法; * 指定init-method和destory-method * 2)、通过让Bean实现InitializingBean(定义初始化逻辑) * DisposableBean(定义销毁逻辑) * 3) 、可以使用JSR250; * @PostConstruct: 在bean创建完成并且属性赋值完成;来执行初始化方法 * @PreDestroy:在容器销毁bean之前通知我们进行清理工作 */ @Configuration public class MainConfigOfLifeCycle { //给容器中注册一个bean; 类型为返回值的类型 id默认是用方法名做为id @Bean(initMethod="init",destroyMethod="destory") public Car car(){ return new Car(); } }
二、测试
测试类
package com.mongougbiubiu.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Scope; import com.mongoubiubiu.conf.MainConfigOfLifeCycle; public class IOCTest_LifeCycle { @Test public void Test01(){ //创建ioc 容器 AnnotationConfigApplicationContext applica= new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class); //applica.getBean("car"); //applica.close(); } }
单实例bean测试
不加@Scope 默认是单实例的 ,单实例在容器启动的时候创建对象
测试类
输出
销毁对象: ioc 容器关闭的时候 对象就销毁了
输出
多实例bean测试
测试
并没有执行创建方法和初始化方法,因为多实例是获取bean的时候才创建bean 对象。
再次测试
容器不会管理bean 关闭容器不会调用销毁方法。
本文作者:KwFruit
本文链接:https://www.cnblogs.com/mangoubiubiu/p/15068323.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步