作用域:
singleton:单例,整个应用中只创建一个实例(默认)

prototype:原型,每次注入时都新建一个实例

session:会话,每个会话创建一个实例

request:请求,每个请求创建一个实例

 

默认情况下,bean都是单例的,在下面这样时初始化,调用各个bean的构造函数

1  <bean id="person" class="com.guigu.spring.autowire.Person"
2      p:name="Tom" ></bean>
3 //相当于:
4  <bean id="person" class="com.guigu.spring.autowire.Person"
5      p:name="Tom" scope="singleton"></bean>

 

1   ApplicationContext ctx = new ClassPathXmlApplicationContext("scope.xml");  //这里初始化,调用bean的构造函数
2   Person person1 = (Person) ctx.getBean("person"); 
3   Person person2 = (Person) ctx.getBean("person"); 
4   system.out.println(person1 == person2);  //结果:true

 

 在第一行时,就调用了构造函数,实例化了对象,并且只有一个对象。 person1 和person2其实是同一个对象

 

若是原型

1   <bean id="person" class="com.guigu.spring.autowire.Person"
2       p:name="Tom" scope="prototype"></bean>

 

 同样,两次调用,结果会是false

1    ApplicationContext ctx = new ClassPathXmlApplicationContext("scope.xml");  //这里初始化,但此时不创建实例
2    Person person1 = (Person) ctx.getBean("person"); 
3    Person person2 = (Person) ctx.getBean("person"); 
4    system.out.println(person1 == person2);  //结果:false

 

 prototype规定,容器初始化时,不会自动创建实例,而是调用它时才创建。调用了两次,就创建了两个实例。

 

session:在一哥session会话中,是同一个bean,不同session就是不同bean

request:每一个HTTP请求生成一个新的bean

 

posted on 2016-08-24 01:12  ooooevan  阅读(297)  评论(0编辑  收藏  举报