作用域和生命周期
bean 的生命周期有六类
singleton(单例) | 上下文只会创建一个实例 |
prototype(多例) | 根据需要创建多个 |
request | 识别到http请求,每个http请求创建一个实例 |
session | bean 的生命周期限定在http session 中 |
application | 整个servletContext 上下文创建一个实例 |
websocket | 每个websocket 连接创建一个 |
bean 单例作用域引入多例
单例在初始化时候已经需要依赖多例,此时prototype 创建一个实例,这个多例的实例就是唯一提供个这个单例。总结:单例引入多例,多例只会创建一个实例。
若想要单例运行期重复获得多例,则不能通过注入的方式,可以通过上下文实时获取多例。
bean循环依赖
构造函数注入不支持循环依赖,但是用setter 属性注入支持。
原因:属性注入,bean 实例化时分两步:先实例化当前对象,然后再实例化注入的属性。当有循环依赖时候先把当前对象实例化,当属性再实例化时从实例换从从获取实例即可。