---singleton
在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>
---prototype
每次从容器获取bean都是新的对象。
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>
此时:
PersonService personService = (PersonService) ctx.getBean("personService");
PersonService personService1 = (PersonService) ctx.getBean("personService");
System.out.println(personService==personService1); //false
-----------------------------------------------------------------------------------------------
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" lazy-init="false" init-method="init" destroy-method="destory">
public class PersonServiceBean implements PersonService {
public void init(){
System.out.println("初始化");
}
public PersonServiceBean(){
System.out.println("我被实例化了");
}
public void save(){
System.out.println("我是save()方法");
}
public void destory(){
System.out.println("开闭打开的资源");
}
}
@Test public void instanceSpring(){
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//PersonService personService1 = (PersonService)ctx.getBean("personService");
ctx.close();
}
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>
PersonService personService = (PersonService) ctx.getBean("personService");
调用getBean()时PersonServiceBean才会被实例化
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" ></bean>
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");//PersonServiceBean已经被实例化