<bean id="person1" class="com.bean.life.Person"> <property name="name"> <value>小明</value> </property> </bean> <bean id="person2" class="com.bean.life.Person"> <property name="name"> <value>小红</value> </property> </bean>
刚接触spring两天,之前一直对这两个概念有误解,一直以为 singleton 说的是所有实现“同名class”的bean指向的是同一个java实例,以上面的bean为例,之前一直认为 person1、person2 是对同一 com.bean.life.Person 对象的引用,so foolish ,不论bean的作用域定位为 singleton 还是 prototype ,person1、person2 都是不同的实例 !
正解是:xml 中配置的每一个 bean 都是不同的实例 !
我们所说的的 singleton 指的是当我们用getBean()或 ref 获得一个 bean 的时候,到底得到的是同一个bean,还是每次都创建一个全新的 bean 实例。在Spring中所说的singleton、prototype都是针对的某“一个”bean。所以:
singleton 指的是 single bean,每个 bean 都只有一个实例对象,不论调用多少次 getBean()方法,不论有多少 ref 依赖,spring 容器中都只有一个 bean 实例。
prototype 指的是都针对这个 bean ,每当调用 getBean()方法,或是有 ref 依赖时,都会创建一个全新的 bean 实例,容器中有多个 bean 实例。
注:Spring 中的缺省作用域是: Singleton 。