Bean的作⽤域与⽣命周期
1.Bean的作⽤域
默认情况下,我们从Spring容器中拿到的对象均是"单例"的,对于bean的作⽤域类型如下:
singleton 作⽤域
注意: lazy-init是懒加载, 如果等于true时作⽤是指Spring容器启动的时候不会去实例化这个bean,⽽是在程序调⽤时才去实例化. 默认是false即Spring容器启动时实例化.
实例:
// 得到Spring容器上下⽂环境
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
这个就是spring容器的启动,如果没设置lazy-init的话就不会去实例这个bean。
// 得到UserController实例化对象
UserController userController = (UserController) ac.getBean("userController");
这个就是得到controller的实例,这个时候就会创建bean的实例。
lazy-init设置为false的好处
1)可以提前发现潜在的配置问题
2)Bean 对象存在于缓存中,使⽤时不⽤再去实例化bean,加快程序运⾏效率
适合作为单例的对象
就是作为适合创建bean例的类,⼀般来说对于⽆状态或状态不可改变的对象适合使⽤单例模式。(不存在会改变对象状态的成员变量)比如:user类定义的是各种属性,但有的时候我们需要的只是user属性的一小部分,所以user就不适合作为单例,而