简介
Spring默认会在容器初始化的过程中,解析xml或注解,创建配置为单例的bean并保存到一个map中,这样的机制在bean比较少时问题不大,但一旦bean非常多时,spring需要在启动的过程中花费大量的时间来创建bean ,花费大量的空间存储bean,但这些bean可能很久都用不上,这种在启动时在时间和空间上的浪费显得非常的不值得。
所以Spring提供了懒加载机制。所谓的懒加载机制就是可以规定指定的bean不在启动时立即创建,而是在后续第一次用到时才创建,从而减轻在启动过程中对时间和内存的消耗。
懒加载机制只对单例bean有作用,对于多例bean设置懒加载没有意义,因为多例bean本来就是在使用时才创建的。
懒加载
在User类中增加一个初始化方法
public void init(){
System.out.println("初始化");
}
在配置文件中,声明这个bean的初始化方法,当该userbean被加载的时候就会执行初始化方法,意味着该bean被加载了
<bean name="user" class="com.shen.User" init-method="init"/>
在测试类中创建容器,并执行
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("application2.xml");
会发现即使什么也没做的情况下还是会加载bean
此时向名为User的bean增加一个 lazy-init 如下,就会启动懒加载
<bean name="user" class="com.shen.User" init-method="init" lazy-init="true"/>
再次执行测试类
会发现现在什么也打印,意味着Spring中的bean没有被加载,这时候试着获取spring容器中的bean,再次执行,会发现bean被加载了。
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("application2.xml");
User user = (User)applicationContext.getBean("user");
如果一个bean开启了懒加载,那么只有从容器中获取的时候才会被加载,如果一个bean没有开启懒加载那么只要容器被初始化 bean就会被加载。