SpringIOC容器中Bean的生命周期

男娘i 2023-02-12 12:28 76阅读 0赞

1.IOC容器中Bean的生命周期方法

  • Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务。
  • SpringIOC容器对Bean的生命周期进行管理的过程:
  1. 通过构造方法或工厂方法创建bean对象
  2. 为Bean对象注入值(调用set方法)
  3. 调用Bean的初始化方法 通过init-method来指定
  4. Bean 可以使用了
  5. 当IOC容器,调用Bean的销毁方法

    • 在Bean的 声明里设置init-method和destory-method属性,为Bean指定初始化和销毁方法。

(1)创建一个javaBean

  1. package com.hbsi.springlifecycle;
  2. public class Address {
  3. private String city;
  4. private String street;
  5. // IOC容器中bean生命周期的第一阶段:调用构造器 创建对象
  6. public Address() {
  7. super();
  8. System.out.println("1.创建Bean对象");
  9. }
  10. // 生命周期的第二阶段:给对象的属性赋值
  11. public String getCity() {
  12. return city;
  13. }
  14. public void setCity(String city) {
  15. this.city = city;
  16. }
  17. public String getStreet() {
  18. return street;
  19. }
  20. public void setStreet(String street) {
  21. System.out.println("2.给对象的属性注入值");
  22. this.street = street;
  23. }
  24. // 生命周期的第三阶段:初始化阶段
  25. public void init() {
  26. System.out.println("3.初始化");
  27. }
  28. // 生命周期的第五阶段:销毁
  29. public void destory() {
  30. System.out.println("5.销毁");
  31. }
  32. @Override
  33. public String toString() {
  34. return "Address [city=" + city + ", street=" + street + "]";
  35. }
  36. }

(2)spring-lifecycle.xml 配置javaBean

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- Spring IOC容器对bean的生命周期进行管理的过程 1.通过构造器或工厂方法创建Bean对象 2.为Bean对象注入值(调用set方法)
  6. 3.调用Bean的初始化方法,通过init-method来指定的 4.Bean可以使用了 5.当IOC容器关闭时,调用Bean的销毁方法 -->
  7. <bean id="address" class="com.hbsi.springlifecycle.Address"
  8. init-method="init" destroy-method="destory">
  9. <property name="city" value="beijing"></property>
  10. <property name="street" value="chaoyang"></property>
  11. </bean>
  12. </beans>

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xicWx6Y2g_size_16_color_FFFFFF_t_70

(3)进行测试,演示bean的生命周期

  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Test {
  4. public static void main(String[] args) {
  5. ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring-lifecycle.xml");
  6. Address address = classPathXmlApplicationContext.getBean("address",Address.class);
  7. System.out.println("4.使用Bean对象"+address);
  8. //关闭容器
  9. classPathXmlApplicationContext.close();
  10. }
  11. }

结果展示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xicWx6Y2g_size_16_color_FFFFFF_t_70 1

2.创建**Bean**后置处理器

  • Bean的后置处理器允许在调用初始化方法前后Bean进行额外的处理
  • Bean的后置处理器对IOC容器里的所有Bean实例逐一处理,而非单一实例,其典型的应用是:检查Bean属性的正确性或根据特定的标准更改Bean的属性
  • 对Bean的后置处理器而言,需要实现BeanPostProcessor接口,在初始化方法被调用前后,Spring将把每个Bean实例分别传递给上述接口的以下两个方法:20200526111723598.png

(1)spring-lifecycle.xml 中配置bean的后置处理器

  1. <!-- 配置Bean的后置处理器:Spring会自动识别该Bean是一个后置处理器类 -->
  2. <bean class="com.hbsi.springlifecycle.MyBeanPostProcessor"></bean>

(2)后置处理器类 Bean的后置处理器对IOC容器中所有的Bean对象的生命周期都起作用.

  1. //创建bean的后置处理器
  2. public class MyBeanPostProcessor implements BeanPostProcessor {
  3. // bean的后置处理器 ,在初始化方法的前后对bean对象进行额外的处理
  4. /*bean的后置处理器对IOC容器里的所有Bean实例逐一处理,而非单一实例,其典型的应用是:检查bean属性是否正确性或根据特定的标准更改bean的属性
  5. * bean的后置处理器对IOC容器中所有的bean对象的生命周期都起作用
  6. */
  7. //Bean:当前的bean对象 beanName:当前bean对象的id值
  8. @Override
  9. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  10. // TODO Auto-generated method stub
  11. System.out.println("postProcessAfterInitialization:" + bean);
  12. Address address = (Address) bean;
  13. address.setStreet("Huilongguan");
  14. return address;
  15. }
  16. @Override
  17. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  18. // TODO Auto-generated method stub
  19. System.out.println("postProcessBeforeInitialization:"+bean);
  20. Address address = new Address();
  21. address.setCity("ShangHai");
  22. address.setStreet("PudongdaDao");
  23. return address;
  24. }
  25. }

测试跟上面的测试是一样的

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xicWx6Y2g_size_16_color_FFFFFF_t_70 2

  • 当加入了Bean的后置处理器,IOC容器中Bean的生命周期分为七个阶段

① 调用构造器 或者是通过工厂的方式创建Bean对象

② 给bean对象的属性注入值

③ 执行Bean后置处理器中的 postProcessBeforeInitialization方法

④ 调用初始化方法,进行初始化, 初始化方法是通过init-method来指定的.

⑤ 执行Bean的后置处理器中 postProcessAfterInitialization方法

⑥ 使用

⑦ IOC容器关闭时, 销毁Bean对象.

3.spring Bean的作用域

见本人博客https://blog.csdn.net/lbqlzch/article/details/106348044

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Bean 生命周期

    Bean 的生命周期 我们知道 Web 容器中的 Servlet 拥有明确的生命周期,Spring 容器中的 Bean 也拥有相似的生命周期。Bean 生命周期由多个特定