在前面,将bean交给了Spring容器管理,在客户端只要调用getBean方法就可以从容器里获取bean实例,大家想想,每调用getBean方法,那么它从容器里获取的bean到底是同一个呢?还是不同?   怎么判断是否是同一个对象呢?可以这样做,代码如下:
SpringTest.java
Java代码
package junit.test;  
 

import org.junit.BeforeClass;   
 import org.junit.Test;   
 import org.springframework.context.ApplicationContext;   
 import org.springframework.context.support.ClassPathXmlApplicationContext;   
   
 import cn.itcast.service.PersonService;   
   
 public class SpringTest {   
   
     @BeforeClass  
     public static void setUpBeforeClass() throws Exception {   
     }   
   
     @Test  
     public void instanceSpring() {   
         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");   
         PersonService personService1 = (PersonService) ctx.getBean("personService");   
         PersonService personService2 = (PersonService) ctx.getBean("personService");   
         System.out.println(personService1 == personService2);   
         // 怎么判断两个对象获取的是否是同一个? 很简单,比较引用是否相同就可以了   
     }   
 }  package junit.test;
import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.service.PersonService;
public class SpringTest {
 @BeforeClass
  public static void setUpBeforeClass() throws Exception {
  } @Test
  public void instanceSpring() {
   ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
   PersonService personService1 = (PersonService) ctx.getBean("personService");
   PersonService personService2 = (PersonService) ctx.getBean("personService");
   System.out.println(personService1 == personService2);
   // 怎么判断两个对象获取的是否是同一个? 很简单,比较引用是否相同就可以了
  }
 }
 beans.xml 
 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"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>  
 </beans>  <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>


</beans>如果返回为true,代表他们引用的对象都是同一个;如果返回的是false,那么得到的就是两个不同的对象。
运行单元测试代码,输出结果为 true。 说明personService1和personService2这两个变量所引用的对象都是同一个,这就证实了:在默认情况下,bean交给Spring容器管理后,那么这个bean是一个单实例。
   那么我们能不能改变这种行为呢?假如现在我不想用单实例,我希望每调用一次getBean方法都获取一个新的实例,那该怎么做呢?  这就牵涉到Bean的作用域了

Bean的作用域
----------------------------------------------------------------
.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都是新的对象。 
 request 
 session 
 global session  .request.session .global session 这三种是web应用才能用的。这里不是web应用,所以不能用。 
 上面那个单例模式指定的就是singleton作用范围。  如果没有指定作用域的话,那么默认就是singleton作用域范围。 
 当业务需求时每调用一次getBean方法,都要获取一个新的实例的话,这个时候就可以通过prototype这个属性值来指定。这个属性值代表:每调用一下getBean方法,都能从容器里获取到新的实例 SpringTest.java不变。 
 beans.xml如下: 
 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"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>  
 </beans>  <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>
 </beans>运行单元测试代码,得出的是false,代表每调用一下getBean方法,它都会返回一个新的对象