Bean对象的作用域与生命周期
Bean对象的作用域
-
单例作用域(singleton作用域)
Spring容器在启动时会自动实例化Bean对象,并将对象设置到单例缓存池中,下次获取时直接从缓存池得到
scope = “singleton” 默认情况下,Spring容器加载的对象都是单例。
-
原型作用域
Spring容器在启动时会实例化Bean对象, 不会将对象设置到单例缓存池中,每次请求都会重新创建一个Bean对象。
scope = “prototype”
lazy-init属性(懒加载)
如果为false,则在IOC容器启动时会实例化Bean对象,默认为false。
如果为true,则IOC容器启动时不会实例化Bean对象,在使用Bean对象时才会实例化
lazy-init设置为false有什么好处?
- 可以提前发现潜在的配置问题
- Bean对象存在于缓存中,使用时不用再去实例化Bean,加快程序运行效率
什么对象适合作为单例对象
一般来说对于无状态或状态不可改变的对象适合使用单例模式。(不存在会改变对象状态的成员变量)
比如:controller层 service层 dao层
什么是无状态或状态不可改变的对象?
实际上对象状态的变化往往均是由于属性值的变化引起的,比如User类 姓名属性会有变化,属性姓名的变化一般会引起user对象状态的变化。对于我们的程序来说,无状态对象没有实例对象的存在,保证了线程的安全性,service层业务对象即是无状态对象。线程安全的。
Bean的生命周期
在Spring中,Bean的生命周期包括Bean的定义,初始化,使用,销毁四个阶段。