在定义一个bean得时候,可以选择声明一下bean的scope,例如每次都需要spring生成新的bean实例 你需要把scope声明称prototype。如果每次都需要获得同一个实例则声明成singleton即可。
Scope Description
Singleton 这个scope在spring中是默认的scope 意思在每个Ioc container中只有该bean的单一实例(单例模式)
prototype 这个scope恰恰和singleton相反 单一的bean拥有很多个实例
request 这个scope依赖于http 的request,每个请求会生成一个bean 实例 所以只能在web应用的context才能生效
session 这个scope依赖于http 的session,每个session会创建一个bean实例 所以也是只能在web应用的context才能生效
global-session 这个是全局的http session同样只有web应用才生效
在test.xml中配置的scope
是prototype的scope 其他的scope和这个配置一样
除了以上几种scope 还可以自定义scope
下面介绍一下 test中的自定义scope测试类SimpleScopeTests
其中涉及到NoOpScope这个类 实现了 Scope接口
Scope接口在org.springframework.beans.factory.config中
Strategy interface used by a {@link ConfigurableBeanFactory},representing a target scope to hold bean instances in
策略模式得接口,是拥有bean实例存在的target。
NoOpScope 实现Scope后 空实现所有方法
只是重写了get方法
Paste_Image.png这个类是生成了两个TestBean实例 供按顺序调用 所以第一个和第二个不同 第三个和第一个却是相同的。
网友评论