默认情况下,spring的IOC容器中lazy-init是false的,即没有打开懒加载模式。
如果你没有看到这个lazy-init 的参数设置就说明是false啦。
那么什么是懒加载?
懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中。
例如我有如下的代码:
-
package com.luch.spring.demo;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
-
import com.luch.spring.bean.Person;
-
-
public
class NewPerson {
-
-
@Autowired
-
private Person person;
-
-
public NewPerson(){
-
System.out.println(
"lazy loading...");
-
}
-
public void printMsg(){
-
if(person !=
null) {
-
System.out.println(person.getName());
-
}
else {
-
System.out.println(
"no person initialize!");
-
}
-
}
-
-
public void setPerson(Person person) {
-
//this.person = person;
-
}
-
-
-
}
在无惨构造器里输出一句话,然后我先不设置懒加载模式:我有一个beans.xml的配置文件:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<beans xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:context=
"http://www.springframework.org/schema/context"
-
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context.xsd">
-
-
<context:annotation-config/>
-
<bean id="person" class="com.luch.spring.bean.Person">
-
<property name="id" value="22">
</property>
-
<property name="name" value="Jack">
</property>
-
</bean>
-
-
<bean id="newPerson" class="com.luch.spring.demo.NewPerson">
-
<property name="person" ref="person">
</property>
-
</bean>
-
-
</beans>
然后我用一个junit来做测试:
-
package junit.test;
-
-
import
static org.junit.Assert.*;
-
-
import org.junit.Test;
-
-
import org.springframework.context.support.AbstractApplicationContext;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
import com.luch.spring.demo.NewPerson;
-
-
public
class JunitTest {
-
-
@Test
-
public void printMsg(){
-
AbstractApplicationContext ctx =
new ClassPathXmlApplicationContext(
"/beans.xml");
-
//NewPerson test = (NewPerson) ctx.getBean("newPerson");
-
//test.printMsg();
-
}
-
}
这个时候输出的结果为:
四月 17, 2014 9:26:41 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@762efe5d: startup date [Thu Apr 17 21:26:41 CST 2014]; root of context hierarchy
四月 17, 2014 9:26:42 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
四月 17, 2014 9:26:42 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@77caeb3e: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,person,newPerson,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
lazy loading..
即对象被实例化了,也就是被加载到spring的容器中去了。
然后我们设置一下懒加载模式:我们beans.xml的配置文件. lazy-init="true"即
- <code class="language-java"><?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
- <context:annotation-config/>
- <bean id="person" class="com.luch.spring.bean.Person">
- <property name="id" value="22"></property>
- <property name="name" value="Jack"></property>
- </bean>
- <bean id="newPerson" lazy-init="true" class="com.luch.spring.demo.NewPerson">
- <property name="person" ref="person"></property>
- </bean>
- </beans></code>
-
<?xml version=
"1.0" encoding=
"UTF-8"?>
-
<beans xmlns=
"http://www.springframework.org/schema/beans"
-
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:context=
"http://www.springframework.org/schema/context"
-
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context.xsd">
-
-
<context:annotation-config/>
-
<bean id=
"person"
class=
"com.luch.spring.bean.Person">
-
<property name=
"id" value=
"22"></property>
-
<property name=
"name" value=
"Jack"></property>
-
</bean>
-
-
<bean id=
"newPerson" lazy-init=
"true"
class=
"com.luch.spring.demo.NewPerson">
-
<property name=
"person" ref=
"person"></property>
-
</bean>
-
-
</beans>