Bean scopes(作用域):
①singleton(单例):当一个bean的作用域为singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。这是默认的作用域。
②Prototype(原型)作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。
*。对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。
*.根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
③request请求、session会话、global session全局会话
仅在web应用中使用,一般用得很少,可以忽略。或查阅参考文档3.4.4
情景:接昨天所学,spring准备将一个参考UserDAOImpl实现的UserDAO实例userDAO注入到UserService的实例userService中去
<bean name="u"
class="com.bjsxt.dao.impl.UserDAOImpl">
</bean>
<bean id="userService"
class="com.bjsxt.service.UserService" scope="prototype">
<property name="userDAO" ref="u" />
</bean>
【JUNIT测试代码段:】
UserService service1 =
(UserService)ctx.getBean("userService");
UserService service2 =
(UserService)ctx.getBean("userService");
System.out.println(service1 == service2);
∴控制台输出的结果是false。因为不是同一个对象。
如果:
<bean name="u"
class="com.bjsxt.dao.impl.UserDAOImpl">
</bean>
<bean id="userService"
class="com.bjsxt.service.UserService" scope="singleton">
<property name="userDAO" ref="u" />
</bean>
∴控制台输出的结果是true。因为都是同一个对象。
⊙_⊙最后,按照我的惯例,附上本次的项目源码(来自尚学堂马士兵的源码),类库用到三个(spring.jar junit.jar(eclipse自带) commons-logging.jar,缺少类库可以到http://moshowgame.iteye.com/admin/blogs/1606825下)。
^_^还有什么好方法或者疑问和意见欢迎大家提出来一起讨论!
- 大小: 69.5 KB
- 大小: 69.5 KB
分享到:
相关推荐
自定义 Spring Bean Scopes 用于默认设置不起作用的情况 可用范围 Route Scope - 提供每个路由执行范围的范围 页面范围 - 提供每页范围的范围 线程范围 - 提供每个线程范围的范围 继承的线程范围 - 提供每个线程...
Spring.Bean.Scopes.Example 这是一个示例,向您展示 bean 范围之间的区别:单例和原型。
Laravel开发-laravel-scopes .zip
而在javascript中,变量的作用域是按函数来划分的——变量在某个函数范围内有效。比如: 代码如下: var f = false; if(true) { var f = true; } //此时f位于if内,也就是块内,等价于还是全局范围内 alert(f)...
Laravel开发-laravel-scopes Laravel的查询生成器的方便范围。
Laravel开发-eloquent-scopes 雄辩(laravel)查询生成器的方便范围。
Laravel开发-laravel-eloquent-scopes 雄辩的一般范围
私有作用域由拥有对象限制,而受保护作用域由继承层次结构限制。该存储库是做什么用的? 范围Javascript模块。 scopes.js是该库的主要模块版本:1.1.0先决条件符合ECAScript 2015的Javascript环境安装NPM软件包-`...
Dagger2Scopes 是一个示例 Android 应用程序,用于使用全新的 Dagger 2 Google 库实现通常的 Dagger 1 多范围逻辑。 在此示例中,您将能够找到以下功能: Dagger 2 的多个范围(组件和子组件)。 一种清洁架构的方法...
OpenSimplex2S 从C#实现移植到编程语言。 在其找到原始的README和代码。
Aliasing a bean outside the bean definition ................................................ 28 Instantiating beans .......................................................................................
当我们在编写 AngularJS 的应用时,通过 Chrome, Firefox, 和 IE 的 ...1: 获取 Scopes (作用域) 我们可以使用一行 JS 代码来获取任何的 Scope (甚至是 isolated scopes) : 复制代码 代码如下:> angular.element
自动范围 无论关联如何,都可以在多个模型上回收已定义的作用域,从而使模型更干燥我总是想知道是否可以重用在深层关联中定义的某些范围,我们都知道使用合并是可能的,但是它仍然不是一个干净的解决方案,我仍然...
Desigo CC手册-08_Scopes_BA_CN(审视)
Spring Boot集成Spring security OAuth2事例 oauth:认证服务器、资源服务器 client-1:资源服务器,与oauth实现SSO client-2:资源服务器,使用RemoteTokenServices进行token验证(无法同时使用SSO和OAuth来保护...
:magnet: 磁铁 Magnet是一个简洁的,基于范围树的... 实例可以在作用域(作用域实例)中或在作用域之外(未作用域实例)进行分配。 依赖规则 范围使用强依赖关系相互依赖-范围依赖只能指向其父范围。 两个作用域之间
MATLAB课件:ch4_functions_and_scopes.pdf
Aliasing a bean outside the bean definition ................................................ 28 Instantiating beans .......................................................................................