Spring中BeanFactory支持两个对象模型
<!--[if !supportLists]--> <!--[endif]--> 单态:模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态 服务对象很理想。
<!--[if !supportLists]--> 原型:模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。
实例:
1 < beans >
2
3 <!-- non-singleton examples -->
4 <bean id="nonSingleton" class="java.lang.String" singleton="true">
5 <constructor-arg>
6 <value>Value</value>
7 </constructor-arg>
8 </bean>
9
10 </beans>
11
12 singleton:指定此JavaBean是否采用单例(Singleton)模式,如果设为"true",则在BeanFactory作用范围内,只维护此JavaBean 的一个实例,代码通过BeanFactory 获得此JavaBean 实例的引用。反之,如果设为"false",则通过BeanFactory获取此Java Bean 实例时,BeanFactory每次都将创建一个新的实例返回。
1 public class
NonSingleton {
2
3 public static void
main(String[] args) {
4
5 BeanFactory factory = new XmlBeanFactory(new
FileSystemResource(
6 "build/beans.xml"
));
7
8 String s1 = (String)factory.getBean("nonSingleton"
);
9 String s2 = (String)factory.getBean("nonSingleton"
);
10 System.out.println("Identity Equal?: " + (s1 ==
s2));
11 System.out.println("Value Equal:? " +
s1.equals(s2));
12
System.out.println(s1);
13
System.out.println(s2);
14
}
15 }
分析结果:
Identity Equal?: true
Value Equal:? true
Value
Value
由结果可以看出由fantory产生的bean对象只有一个。
注意:
在Spring中消除了由用户自己来实现Singleton模式的应用,Spring Bean的缺省行为就是Singleton,不必再为了Singleton编码。
凤凰涅槃/浴火重生/马不停蹄/只争朝夕
隐姓埋名/低调华丽/简单生活/完美人生