Bean的生命周期

Bean的生命周期

Spring Bean 类型与配置

1.1 Bean 种类

普通 Bean

  • 普通的 Bean 定义格式为 <bean id="" class="A">,Spring 容器会直接创建 A 类的实例并返回。

FactoryBean

  • FactoryBean 是一种特殊的 Bean,具有工厂方法来生成对象的能力。
    • 实现 FactoryBean 接口的类必须提供 getObject() 方法,该方法用于获取特定 Bean 的实例。
    <bean id="" class="FB">
    
    • 在此情况下,Spring 首先创建 FB 类的实例,然后通过调用 getObject() 方法,并返回该方法的返回值。
      FB fb = new FB();
      return fb.getObject();
      
    
    

BeanFactory 和 FactoryBean 对比

  • BeanFactory:是 Spring 的核心接口,它是一个容器,负责生产和管理任意类型的 Bean。
  • FactoryBean:是一种特殊的 Bean,它不是用来被注入到其他 Bean 中的,而是用来生产另一个特定 Bean 的。例如,ProxyFactoryBean 可以用于生成代理对象实例:
    <bean id="" class="...ProxyFactoryBean"> <!-- 获得代理对象实例 -->
    
    • AOP(面向切面编程)中常常使用 FactoryBean 来创建代理对象。

生命周期属性:lazy-init

  • 默认值为 false,表示在 Spring 容器启动时创建对象。
  • 当设置为 true 时,对象将在首次 getBean() 调用时创建。
  • 设置为 defaultfalse 时,对象在 Spring 容器初始化阶段创建。
  • image.png
默认情况(`scope=singleton`,只创建一个实例)
  • Spring 创建的 Bean 默认是单例模式,这意味着对于 service 和 dao 层的所有类,在放入 Spring 容器后,默认是单例的。因此,这些层的类不应该在类属性中存储数据,因为那样会导致数据在所有实例之间共享(存在安全性问题)。
  • image.png
  • image.png

生命周期

  1. 创建:通过构造函数创建对象实例。
  2. 初始化:Spring 内部执行初始化回调方法(如实现 InitializingBean 接口或定义 init-method)。
  3. 销毁:当 Spring 容器关闭时,会调用销毁回调方法(如实现 DisposableBean 接口或定义 destroy-method)。通常情况下,随着 Web 容器的关闭,Spring 容器也会随之关闭。
  4. image.png
  5. image.png

构造器注入

  • 使用 constructor-arg 标签可以指定 Bean 的构造函数参数。
  • 可以通过 indexrefvaluetype 来唯一标识构造器参数。
  • 如果一个 Bean 的配置中没有 constructor-arg 属性,则 Spring 容器将尝试使用默认的无参构造函数来创建对象实例。
  • 因此,在编写 JavaBean 时,推荐提供属性的 setter 方法、默认构造器以及带有参数的构造器以适应不同的依赖注入场景。

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

posted @   汉源魂  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示