看完这篇Bean的作用域与生命周期,问到面试官不敢问--乐字节java
Bean的作用域与生命周期 Bean的作用域 默认情况下,我们从Spring容器中拿到的对象均是 单例 的,对于bean的作用域类型如下: singleton 作用域 注意: lazy-init是懒加载, 如果等于true时作用是指Spring容器启动的时候不会去实例化这个bean, 而是在程序调用时才去实例化. 默认是false即Spring容器启动时实例化. 默认情况下,被管理的bean只会IOC容器中存在一个实例,对于所有获取该Bean的操作Spring容器将只返回同一个Bean。 容器在启动的情况下就实例化所有singleton 的 bean对象,并缓存与容器中 lazy-init属性(懒加载) 如果为false,则在IOC容器启动时会实例化bean对象,默认false 如果为true,则IOC容器启动时不会实例化Bean对象,在使用bean对象时才会实例化 lazy-init设置为false有什么好处? 1)可以提前发现潜在的配置问题 2)Bean 对象存在于缓存中,使用时不用再去实例化bean,加快程序运行效率 什么对象适合作为单例对象? 一般来说对于无状态或状态不可改变的对象适合使用单例模式。(不存在会改变对象状态的成员变量) 比如:controller层、service层、dao层 什么是无状态或状态不可改变的对象?