栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

详解Spring中Bean的生命周期

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解Spring中Bean的生命周期

简述bean生命周期

从对象创建到对象销毁的过程。Spring的IOC容器可以管理bean的生命周期,其允许在bean的生命周期的特定时间点执行相应的任务。

bean的生命周期(不考虑bean的后置处理器)
  1. 通过构造器或工厂方法创建bean实例
  2. 为bean的属性设置值和对其它bean引用
  3. 调用bean的初始化方法
  4. 使用bean
  5. 当容器关闭时,调用bean的销毁方法
举例演示bean的生命周期:

创建的bean对象

public class test {
    private String name;

    public test() {
        System.out.println("第一步 创建bean");
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("第二步 设置属性值");
    }

    public void myInit() {
        System.out.println("第三步 bean被初始化");
    }

    public void myDestory() {
        System.out.println("第五步 bean被销毁");
    }
    
    public String getName() {
        return name;
    }

}

配置文件




    


运行

  @Test
  public void test(){
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
      test test = context.getBean("test", test.class);
      System.out.println("第四步 使用bean " +test.getName());
      context.close();
  }
// 上述代码运行结果
第一步 创建bean
第二步 设置属性值
第三步 bean被初始化
第四步 使用bean张三
第五步 bean被销毁

注意:单例bean和多实例的bean的创建时间是不同的,那么他们的初始方法和销毁方法的执行时间也稍微不同

单例bean的生命周期

  1. 容器启动
  2. 初始化方法
  3. 容器关闭,销毁方法

多例bean的生命周期

  1. 容器启动
  2. 调用bean
  3. 初始化方法
  4. 容器关闭(销毁方法不执行)
上述未考虑bean的后置处理器,接下来加上bean的后置处理器 什么是bean的后置处理器?

bean的后置处理器允许在初始化方法执行前后对bean做额外的操作,bean的后置处理器对IOC容器中的所有bean实例逐一处理,而非单一处理。其典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性。

生命周期

a. 通过构造函数或工厂方法创建bean实例
b. 为bean的属性设置值和对其它bean的引用
c. 将bean实例传递给bean后置处理器的postProcessBeforeInitialization方法
d. 调用bean的初始化方法
e. 将bean实例传递给bean后置处理器的 postProcessAfterInitialization方法
f. bean可以使用了
g. 当容器关闭时调用bean的销毁方法

举例:

首先我们需要实现

org.springframework.beans.factory.config.BeanPostProcessor

接口并实现里面的两个方法。如下

public class beanPostProcessor implements BeanPostProcessor {
    
      
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("bean的后置处理器 初始化方法执行前---");
        return null;
    }

    
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("bean的后置处理器 初始化方法执行后---");
        return null;
    }
}

注册bean



    
  
        
  
    // bean的后置处理器
  


运行,从结果我们可以看出bean生命周期的过程

  @Test
  public void test(){
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
      test test = context.getBean("test", test.class);
      System.out.println("第四步 使用bean " +test.getName());
      context.close();
  }
// 以下是执行结果
第一步 创建bean
第二步 设置属性值
bean的后置处理器 初始化方法执行前---
第三步 bean被初始化
bean的后置处理器houzhichui 初始化方法执行后---
第四步 使用bean 张三
第五步 bean被销毁

参考:详解Spring中Bean的作用域与生命周期

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号