1.spring中创建对象的三种方式
- 使用无参数构造器创建
- 使用静态工厂方法创建
- 使用实例化对象工厂方法创建
| |
| <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有效。
- 当scope为singleton时
可以看出作用域为singleton时,对象只创建了一次,并且两者相等,虽然使用getBean方法两次,但是却只有一个对象,似乎对象不是getBean方法获得,这跟后面要说的延迟加载有关。
- 当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方法才会创建对象,并且是创建多个不同的对象 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构