9.Spring-Bean的生命周期
本文最后更新于2023.11.30-17:26
,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥。
概念:
1.指的是Spring直接管理的对象从 创建到销毁的 全部过程,Spring容器可以在 生命周期的某些时间点对管理的Bean进行增强(比如生成代理)。
2.对于单例模式的对象,Spring负责创建和销毁,对于多例模式只负责创建,不负责销毁。
3.ClassPathXmlApplicationContext和FileSystemXmlApplicationContext容器 在 容器关闭时,会销毁对象。
4.对于Web应用,则是在Web容器(tomcat) 关闭的时候 销毁容器,并销毁容器里的对象。
如何获取 bean的名字?
让java类 实现 BeanNameAware 接口,Spring容器发现 管理的对象实现了这个接口,会自动的把beanName(ID) 注入给这个对象
如何让bean获取容器?
实现 ApplicationContextAware接口,Spring容器发现 管理的对象实现了这个接口,会自动的把beanName(ID) 注入给这个对象
Spring容器管理对象的两个时机
a.注入属性之后
- 在配置中 加入 init-method() 指定初始化方法
- 让类实现 InitializingBean 接口(不推荐,污染代码)
b.对象销毁之前
- 在配置中 加入 destory-method 指定销毁方法
- 让类实现 DisposableBean 接口(不推荐,重写destroy方法)
Spring的两种处理器
1. Bean后处理器:
Bean后处理器 也是 Spring管理的一个对象,这个对象不对外提供(不需要配置ID 也不需要配置name),它会在其他的bean 创建成功 之后,对其他的bean 进行再一步的增强.(主要用于生成代理)
自定义Bean后处理器,让一个类实现BeanPostProcessor接口
重写: postProcessBeforeInitialization() 在执行 初始化方法之前增强
postProcessAfterInitialization() 在执行 初始化方法之后 增强
2 容器后置处理器
在spring容器创建之后,负责对容器增强,
让一个类 实现 BeanFactoryPostProcessor
重写接口的方法。
Spring容器管理对象的完整生命周期:
1.容器后置处理器 BeanFactoryPostProcessor 增强容器
2.执行 无参构造 或者 有参构造方法
4.实现 BeanNameAware接口,获取对象的名字
5.实现 ApplicationContextAware接口,获取容器
6.实现 Bean后处理器-BeanPostProcessor接口, 执行前置处理
7.执行 InitializingBean接口的 初始化方法
8.执行配置文件中 使用init-method自定义的 初始化方法
9.实现 Bean后处理器-BeanPostProcessor接口, 执行后置处理
10.执行 DisposableBean 的 销毁方法
11.执行配置文件 destroy-method自定义的销毁方法
两种最常用的 容器后置处理器:
属性占位符配置器(PropertyPlaceHolderConfigurer)
作用:提前把一些需要用到的字面量 写在某个文件里,然后在容器配置中,通过
${键名}把需要的值取出来。
配置方法:
<context:property-placeholder location="db.properties">
属性重写配置器
作用:在Spring容器中,声明某些bean后,把这些bean 需要的属性,重新写在一个指定的文件中
写的时候 格式是 beanId.属性=值
配置方法:
<context:property-override location="db.properties">
任务:
1.!!!!!只用完整的执行一边即可
要求在控制台 打印Spring管理对象的 完整生命周期 11步
2.创建一个 User类
用户名 密码 年龄 注册时间
作者:涛哥
链接:https://ltbk.net/back/spring_family/spring/article/402.html
文章版权归作者所有,未经允许请勿转载。