Spring创建对象初始化bean的时机分为两种形式:

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InitTest {
	
	/**	spring在创建对象初始化bean的时机分为两种形式:
	 * *  1.在默认情况下(),spring容器启动的时候,就把所有的纳入spring
	 * 		容器的bean创建对象:先public HelloWorld(){}后执行context.getBean()
	 * 		缺点:如果一个对象中有属性,比如这个属性为集合,在创建这个对象的过程中,集合中有数据
	 * 			这样采用默认的启动形式,就会导致数据过早的加载到内存中。
	 * *  2.可以在spring的配置文件中采取如下形式来延长bean的创建时间,在context.getbean()
	 * 		时才创建bean对象:先执行context.getBean()后public HelloWorld(){}
	 * 			
	 * *    缺点:如果spring的配置文件书写错误,如果所有的spring的bean都采用lazy-init=”true“这种形式
	 * 			则在启动web服务器时就发现不了spring容器的错误,这样就不利于排错。
	 */
	@Test
	public void test(){
		ApplicationContext context = new ClassPathXmlApplicationContext("cn/itcast/spring01/init/applicationContext.xml");
		HelloWorld helloworld = (HelloWorld)context.getBean("helloWorld");
		helloworld.say();
	}
}

在每个Spring IoC容器中一个bean定义只有一个对象实例(共享)。

  默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean

 这时候,只有第一次获取bean会才初始化bean。如:

 

 如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“如下: 

  

你可能感兴趣的:(spring)