随笔 - 6  文章 - 129  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 822231
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

Bean的作用域

  在spring2.0中,一共定义了5种作用域,分别是singleton、prototype、request、session、
globalSession。其中后面三种仅对WEB应用程序有效。
  spring2.0通过scope=""属性来定义Bean有作用域,而在spring1.x中,由于只有singleton 和
prototype这两种作用域,因此,spring1.x中定义Bean的作用域是通过singleton=“true|false" 来
定义的。在spring2.0中首先应该考虑用scope属性来定义Bean 的作用域。

Singleton作用域
  
  spring2.0是默认Bean的作用域是scope="singleton"。即spring的IoC容器仅为每个Bean创建一个
实例并且保持Bean的引用,换言之,每次调用getBean()方法请求返回的Bean总是同一个实例。这类似
于《设计模式》一书中的Singleton(单例)模式。

  public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {};
    pubilc static Singleton getInstance() {
      return instance;
    }
  }
  由于构造方法被申明为private,因此,在类的外部不可实例化该类,唯一的实例持有在静态引用中
从外部获取该实例的唯一入口是调用Singleton的静态方法Singleton.getInstance().

Prototype作用域

  如果需要每次返回Bean的新实例,即每次都新建一个实例,则可以通过设置scope="prototype"来
实现。这样我们就告诉了spring容器采用Prototype作用域。采用prototype作用域时,spring容器总会
返回一个创建的新实例,因此spring容器一旦将实例交给客户端,就不再对其进行跟踪引用了,所以
无法对prototype作用域的Bean定义destory-method,不过仍可以使用init-method。
其它三个属性值仅对WEB程序有效,这里不作讨论。



posted on 2007-10-21 17:55 Ke 阅读(1176) 评论(0)  编辑  收藏 所属分类: spring

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


网站导航: