即兴的灵感

思维是一种艺术; 艺术需要灵感。

博客好友

最新评论

Spring笔记之六(IoC Singleton)

   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编码。



 
凤凰涅槃/浴火重生/马不停蹄/只争朝夕
     隐姓埋名/低调华丽/简单生活/完美人生

posted on 2007-09-26 13:22 poetguo 阅读(4302) 评论(1)  编辑  收藏 所属分类: Spring

评论

# re: Spring笔记之六(IoC Singleton)[未登录] 2008-08-10 15:34 mjgforever

singleton为true,程序正常。将singleton设置为false,程序为什么报错?
<bean id="nonSingleton" class="java.lang.String" singleton="false">
<constructor-arg>
<value>Value</value>
</constructor-arg>
</bean>


Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nonSingleton' defined in file [E:\Java\workspace\Spring_Singleton\build\beans.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.lang.String]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.lang.String]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:186)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:795)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:713)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:268)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at spring.singleton.NonSingleton.main(NonSingleton.java:15)
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: