spring bean生命周期_Spring基础及组件(二):Bean的生命周期

什么是Bean的生命周期呢?

Bean的生命周期指Bean创建-->初始化-->销毁 的过程
我们可以自定义Bean初始化和销毁方法
容器在bean进行到当前生命周期的时候, 来调用自定义的初始化和销毁方法

早期xml的方式,在<bean>标签里 需要写 init-method destroy-method,指定初始化的方法要做的事以及销毁的时候要做的事,如下图所示:

758ccbf92087629f5ef08ba66c52c310.png

后来可以直接用注解的方式:

单实例Bean的生命周期:

单例Bean的生命周期就是 
ioc容器创建的时候,会调用单例bean的构造器以及init方法初始化bean;
ioc容器关闭的时候,调用destory销毁bean。

33972a685b131de3fe2f6bb66547af85.png

测试:

2b7e41a6cc3767937ca6a8b3358828d8.png

如上图所示,单例Bean的生命周期就是 ioc容器创建的时候,会调用单例bean的构造器以及init方法初始化bean;ioc容器关闭的时候,调用destory销毁bean。


多实例Bean的生命周期:

对于多实例的bean,容器只负责初始化, 但不会管理bean, 容器关闭时不会调用销毁方法

可以添加 @Scope("prototype") 来验证

7657feaa4def7f027db873c5a9c545a6.png

测试:可以看到Sandy类里写的任何输出都没有

6e6a4315ca2b603028210a15067bda8b.png

上述方法都是自己在实体类里写 init() 和 destory()方法。

Spring也有相应的提供Bean的 init() 和 destory() 接口:

init:实现 InitializingBean 接口的 afterPropertiesSet() 方法,当 beanFactory 创建好对象,且把bean所有属性设置好之后,会调这个方法,相当于初始化方法

destory:实现 DisposableBean的destory()方法,当bean销毁时,会把单实例bean进行销毁

833adf223f60353a89fe9727012d8e05.png

测试类:

6d99592f607c9155c0c11810fb68dfe2.png

还有一种方式,使用注解:

2a750ab6c8eeda0141fe65f47d20b6ec.png

59080af1d767d54d34d3f9b7851f3323.png

测试:

da69b70732bc662bbe74a67b2608fba3.png

看下面这段代码:是Bean的生命周期的一段核心代码,具体打个断点就可以找到

e7d5c0abc9ff2acc9b07899a1348e583.png

Bean生命周期 BeanPostProcessor

在bean初始化之前调用进行拦截,在bean初始化前后进行一些处理工作

使用BeanPostProcessor如何控制Bean的生命周期;

实现BeanPostProcessor的两个接口即可

1, postProcessBeforeInitialization()

2,postProcessAfterInitialization()

实体类SuSan:用注解@PostConstruct标注了 init ,用@PreDestroy 标注了destory 方法

7f4352d3a3b073b02478bef4544693cc.png

空的实体类:和有初始化和销毁方法的SuSan类做对比

7d48de263fe776daaab9c279729bd7a3.png

实现了 BeanPostProcessor 接口的类 T

0675ef6566bc1737d3410787e047104d.png

然后是配置类:

36e3712fd34160eb7fb07111f56cb3a9.png

因为我在实体类上标注了 @Component , 在配置类上又标注了@ComponentScan

这样配置类就可以把相应路径下的包里加了 @Component、@Service、@Controller等注解的类自动注入到容器中,所以在配置类里就不用再写对应实体类写方法 然后方法头上加@Bean了。

测试类:

d0c4e1ca4151d1335e461635983a5495.png

e6e839126970b241de1c6f694f13ab99.png

BeanPostProcessor 具体后面文章再做分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值