- 浏览: 850249 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
在Spring的Bean配置中,存在这样两种情况:
- <bean id="testManager" class="com.sw.TestManagerImpl" scope="singleton" />
- <bean id="testManager" class="com.sw.TestManagerImpl" scope="prototype" />
当然,scope的值不止这两种,还包括了request,session 等。但用的最多的还是singleton单态,prototype多态。
singleton表示该bean全局只有一个实例,Spring中bean的scope默认也是singleton.
prototype表示该bean在每次被注入的时候,都要重新创建一个实例,这种情况适用于有状态的Bean.
对于SSH架构的系统,很少关心这方面,因为我们用到的一般都是singleton. Bean的注入由Spring管理。
对于有状态的Bean呢?
下面是一个有状态的Bean
- package com.sw;
- public class TestManagerImpl implements TestManager{
- private User user;
- public void deleteUser(User e) throws Exception {
- user = e ; //1
- prepareData(e);
- }
- public void prepareData(User e) throws Exception {
- user = getUserByID(e.getId()); //2
- .....
- //使用user.getId(); //3
- .....
- .....
- }
- }
如果该Bean配置为singleton,会出现什么样的状况呢?
如果有2个用户访问,都调用到了该Bean.
假定为user1,user2
当user1 调用到程序中的1步骤的时候,该Bean的私有变量user被付值为user1
当user1的程序走到2步骤的时候,该Bean的私有变量user被重新付值为user1_create
理想的状况,当user1走到3步骤的时候,私有变量user应该为user1_create;
但如果在user1调用到3步骤之前,user2开始运行到了1步骤了,由于单态的资源共享,则私有变量user被修改为user2
这种情况下,user1的步骤3用到的user.getId()实际用到是user2的对象。
而如果是prototype的话,就不会出现资源共享的问题。
对于SSH来说,Bean的配置是没错的,配置为singleton ;实际应该是这个例子不应该用私有变量。这样就使得这个Bean
由无状态变成了有状态Bean.还是应该尽量使用无状态Bean.如果在程序中出现私有变量,尽量替换为参数。
对于每个访问私有变量的方法增加变量传入或者通过ThreadLocal来获取也是不错的方法。
真正出现上面代码问题的也是少数,出现的时候,一般是为了图方便,一个很多方法都要用到的变量,如果都需要用参数的
方式传递多麻烦呀,这样私有变量多好,不用参数那样丑陋。但是丑陋并不代表不好,以对的,自己习惯的方式编程,才能
尽量避免问题的发生。
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的
发表评论
-
Spring事务的传播行为和隔离级别
2015-01-23 09:15 595Spring事务的传播行为和隔离级别[transaction ... -
Spring3.2.8+Mybatis3.2.6+Maven 整合配置
2015-01-06 14:01 1434 -
采用AOP+log4j记录项目日志
2014-10-28 16:39 485关于AOP,我之前对AOP ... -
Spring Security3.1实践
2014-05-07 14:45 1005说明下: 本篇博客时间久远,数 ... -
SpringMVC3.0+MyIbatis3.0(分页示例)
2013-10-30 17:24 2213参考资料 1 ibatis2.x与mybatis ... -
网上的一篇spring security详解教程,觉得不错,转过来了
2013-07-30 22:16 1343先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但 ... -
Spring Security3配置使用
2013-07-30 16:48 3486使用Spring Security3的 ... -
SSH项目中加入spring security(二)--加入自定义数据表
2013-07-30 13:32 1015上一篇中基本的spring security已经加入到项 ... -
SSH项目中加入spring security(一)
2013-07-30 13:30 1565很久没有写过博客了,最近项目中 ... -
Spring定时任务的几种实现
2013-01-22 18:27 847近日项目开发中需要执行一些定时任务,比如需要在 ... -
spring security权限管理手册升级至spring security-3.1.3
2012-12-08 12:57 1960企业应用 费了半天劲,终于把原来基于spri ... -
在Spring、Hibernate中使用Ehcache缓存
2012-11-02 21:49 916前一篇http://www.blogjava.n ... -
不重复配置——利用Spring通用化配置
2012-10-17 09:40 973还记得 如下这种配置吗: 1、struts2作用域 ... -
Ehcache 整合Spring 使用页面、对象缓存
2012-10-16 09:44 780Ehcache在很多项目中都出现过,用法也比较简单。一般的 ... -
Spring AOP 中的通知
2012-09-16 13:32 12302010-08-29 16:54:18| ... -
Spring Security3十五日研究
2012-09-12 10:22 1946前言 南朝《述 ... -
spring2.5 的 security 权限验证
2012-09-09 08:12 927package com.hd.security.se ... -
Spring MVC和Struts2的区别
2012-09-08 08:59 10321. 机制:spring mvc的入口是servlet,而st ... -
跟我学spring3.0 电子书
2012-08-30 13:13 1217好东西 收藏!学习! -
Spring的初始化过程
2012-06-14 13:54 1198Spring 的几个接口 1.InitializingB ...
相关推荐
spring bean 的作用域(scope), SPringle bean的作用域
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
如果Bean定义中有`factory-method`属性,那么Spring会调用指定的方法来实例化Bean,而不是使用默认的构造器。 2. **属性注入**:实例化后,Spring会根据Bean定义中的`property`或`ref`属性为Bean注入依赖。这包括了...
在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...
在Spring框架中,Bean的作用域(scope)是一项非常重要的特性,它决定了Bean实例的生命周期和管理方式。正确理解和运用Bean的作用域对于优化应用程序性能、简化开发流程具有重要意义。本文将详细介绍Spring中不同...
创建SpringBean配置工具类(安全)如: <bean id=... scope="prototype"></bean>
Spring Bean 的作用域之间有什么区别:Bean的作用域: 可以通过scope 属性来指定bean的作用域 ①singleton: 默认值。当IOC容器
1. **实例化**:Spring容器通过无参构造函数或工厂方法创建Bean实例。如果配置了`@Scope("prototype")`,每次请求都会创建一个新的Bean。 2. **属性注入**:Spring容器将根据Bean定义中的属性值、setter方法或构造...
理解并熟练使用Bean的scope对于有效地管理和控制Spring应用中的对象至关重要,它可以优化资源利用,提高性能,并确保正确的状态管理。在实际开发中,根据业务需求选择合适的scope是至关重要的。
Spring bean可以有多种作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。单例bean在整个应用中只有一个实例,而原型bean每次请求都会创建新的实例。其他作用域主要适用于Web...
默认情况下,Bean的scope为"singleton",表示Spring容器只创建一个实例,并将其缓存。如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁**:当容器关闭时,如果是"singleton"作用域的Bean,...
当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...
在配置Bean时,可以使用scope参数来指定Bean的作用域。 三、Bean的实现方式 Spring框架提供了多种方式来实现Bean,例如使用XML配置文件、使用Annotation配置等。 1. 使用XML配置文件:可以在XML配置文件中配置...
`BeanFactory`提供了一个延迟初始化Bean的能力,这意味着Bean只在真正被请求时才会被实例化,这有助于提高应用的启动速度。例如,当使用`XmlBeanFactory`从XML配置文件加载Bean定义时,`BeanFactory`会解析并加载...
Spring Bean 是 Spring 框架的核心概念,它代表了应用程序中的一个对象,这个对象可以被 Spring 容器管理,包括创建、初始化、装配、销毁等生命周期过程。在 Spring 中,Bean 定义是由 `BeanDefinition` 接口来表示...
"粗略实现spring创建bean"这个主题主要涉及到Spring如何初始化、配置以及管理Java对象,也就是我们所说的Bean。下面我们将深入探讨Spring Bean的生命周期、配置方式以及相关API。 1. Spring Bean 的生命周期 - ...
在Spring中,Bean可以有多种Scope,包括: 1. **singleton**:默认的Scope,每个容器中只有一个Bean实例。当多个地方需要同一个Bean时,Spring会返回同一个实例,实现全局唯一。 2. **prototype**:每个请求都会...
组件扫描是指Spring容器会遍历指定的包及其子包,寻找带有特定注解的类,这些注解表明该类是一个Spring Bean。常见的注解有@Component、@Service、@Repository和@Controller,它们分别代表不同层次的组件角色。 1. ...
`RequestScope`确保每个HTTP请求都有一个独立的Bean实例,而`SessionScope`则保证在同一个会话期间使用同一个Bean实例,从而实现状态的持久化。理解并正确使用这些作用域对于构建健壮的、高性能的Web应用程序至关...
- 配置Singleton Bean的例子是:`<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>` 或 `<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>` 2. **Prototype...