Java Spring Bean的生命周期管理详解
程序员文章站
2022-06-23 10:22:31
目录spring bean的生命周期管理一、spring bean的生命周期二、通过@bean的参数(initmethod ,destroymethod)指定bean的初始化和销毁方法1、项目结构2、...
spring bean的生命周期管理
一、spring bean的生命周期
通过以下方式来指定bean的初始化和销毁方法, 当bean为单例时,bean归spring容器管理,spring容器关闭,就会调用bean的销毁方法 当bean为多例时,bean不归spring容器管理,spring容器关闭,不会调用bean的销毁方法
二、通过@bean的参数(initmethod ,destroymethod)指定bean的初始化和销毁方法
1、项目结构
2、person
public class person { public person(){ system.out.println("person 创建了..."); } public void init(){ system.out.println("person 初始化了..."); } public void destroy(){ system.out.println("person 被销毁了..."); } }
3、bean注册配置类(单实例)
import com.dashu.bean.person; import org.springframework.context.annotation.*; @configuration public class beanconfig { @bean(initmethod = "init",destroymethod = "destroy") public person person(){ return new person(); } }
4、测试类
import com.dashu.bean.person; import com.dashu.config.beanconfig; import org.springframework.context.annotation.annotationconfigapplicationcontext; public class main { public static void main(string[] args) { //加载配置类获取容器 annotationconfigapplicationcontext annotationconfigapplicationcontext = new annotationconfigapplicationcontext(beanconfig.class); //获取bean person bean = annotationconfigapplicationcontext.getbean(person.class); //关闭容器 annotationconfigapplicationcontext.close(); } }
5、测试结果
6、bean注册配置类(多实例)
import com.dashu.bean.person; import org.springframework.context.annotation.*; @configuration public class beanconfig { @scope("prototype") @bean(initmethod = "init",destroymethod = "destroy") public person person(){ return new person(); } }
7、测试结果
三、bean实现接口initializingbean, disposablebean
1、person
import org.springframework.beans.factory.disposablebean; import org.springframework.beans.factory.initializingbean; public class person implements initializingbean, disposablebean { public person(){ system.out.println("person 创建了..."); } @override public void afterpropertiesset() throws exception { system.out.println("person 初始化了..."); } @override public void destroy() throws exception { system.out.println("person 被销毁了..."); } }
2、bean注册配置类
import com.dashu.bean.person; import org.springframework.context.annotation.*; @configuration public class beanconfig { @bean public person person(){ return new person(); } }
3、测试结果
四、通过注解@postconstruct和@predestroy
@postconstruct:标注在bean的初始化方法上 @predestroy:标注在bean的销毁方法上
1、person
import javax.annotation.postconstruct; import javax.annotation.predestroy; public class person { public person(){ system.out.println("person 创建了..."); } @postconstruct public void init(){ system.out.println("person 初始化了..."); } @predestroy public void destroy(){ system.out.println("person 被销毁了..."); } }
2、测试结果
五、使用接口beanpostprocessor实现类(后置处理器)
1、项目结构
2、person
import org.springframework.stereotype.component; import javax.annotation.postconstruct; import javax.annotation.predestroy; @component public class person { public person(){ system.out.println("person 创建了..."); } @postconstruct public void init(){ system.out.println("person 初始化了..."); } @predestroy public void destroy(){ system.out.println("person 被销毁了..."); } }
3、bean注册配置类
import org.springframework.context.annotation.*; @configuration @componentscan({"com.dashu"}) public class beanconfig { }
4、beanpostprocessor实现类(后置处理器)
import org.springframework.beans.beansexception; import org.springframework.beans.factory.config.beanpostprocessor; import org.springframework.beans.factory.config.instantiationawarebeanpostprocessor; import org.springframework.lang.nullable; import org.springframework.stereotype.component; /** * 后置处理器:初始化前后进行处理工作 */ @component public class mybeanpostprocessor implements beanpostprocessor { /** * 初始化之前工作 * @param bean * @param beanname * @return * @throws beansexception */ @override public object postprocessbeforeinitialization(object bean, string beanname) throws beansexception { system.out.println("初始化之前..."+beanname+"=["+bean+"]"); return bean; } /** * 初始化之后工作 * @param bean * @param beanname * @return * @throws beansexception */ @override public object postprocessafterinitialization(object bean, string beanname) throws beansexception { system.out.println("初始化之后..."+beanname+"=["+bean+"]"); return bean; } }
5、测试结果
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!
上一篇: 刘邦一生中最重要的女人都有谁?
下一篇: 放了一首小苹果