9.Spring-Bean的生命周期

本文最后更新于2023.11.30-17:26,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

Bean的生命周期概念:

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.执行 无参构造 或者 有参构造方法

3.执行 对象的 属性的 set方法

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类

用户名 密码 年龄 注册时间

要求Spring 管理一个user对象,并把这个user的属性 写在 user.properties文件下

download
来源:百度网盘 | 提取码:osur

阅读剩余
THE END