spring中创建的对象的作用域

1.spring中创建对象的三种方式

  1. 使用无参数构造器创建
  2. 使用静态工厂方法创建
  3. 使用实例化对象工厂方法创建
<!-- 使用无参数构造器 -->
<bean id="person" class="com.boe.Person"></bean>
<!-- 使用静态工厂方法 -->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance">
<!-- 使用实例化对象工厂方法 -->
<bean id="date" factory-bean="cal" factory-method="getTime"></bean>

2.作用域

作用域有singleton和prototype,默认为前者,设置延迟加载只对singleton有效。

  1. 当scope为singleton时
    可以看出作用域为singleton时,对象只创建了一次,并且两者相等,虽然使用getBean方法两次,但是却只有一个对象,似乎对象不是getBean方法获得,这跟后面要说的延迟加载有关。
  2. 当scope为prototype时
    当作用域为prototype时,创建了两个对象,并且两者不相等,说明使用一个getBean方法,就创建了一个新的对象。
    延迟加载:默认情况下容器启动之后,会将作用域为singleton的bean创建好,设置延迟加载容器启动之后,对作用域为singleton的bean不再创建,直到调用getBean方法才会创建,设置延迟加载需在配置文件中设置lazy-init属性。
1)scope="singleton"lazy-init="false":启动容器就创建对象,并且只有一个
2)scope="singleton"lazy-init="true":启动容器不会创建对象,直到调用getBean方法才会创建对象,并且只有一个
3)scope="prototype",无论是否设置延迟加载,均只有在调用getBean方法才会创建对象,并且是创建多个不同的对象
posted @   这都没什么  阅读(3797)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示