- 浏览: 164616 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (116)
- 随笔 (2)
- spring (24)
- struts (1)
- hibernate (6)
- log4j (0)
- mysql (14)
- oracle (0)
- ext (0)
- jQuery (0)
- HTML+CSS (2)
- Javascript (1)
- 其它杂碎 (0)
- IT (3)
- J2EE综合 (15)
- SQLServer (1)
- 好文章URL 待阅读 (3)
- 编辑器 (2)
- 版本控制 (5)
- Tomcat (4)
- DoJo (0)
- Ubuntu (11)
- Hadoop (3)
- cxf (3)
- maven (6)
- CI (5)
- H2 (1)
- JVM (1)
- FirefoxOS (1)
- Jboss (1)
- 操作系统 (1)
- C3P0 (2)
- Quartz (1)
- maps (10)
- 设计模式 (5)
最新评论
-
yogurt2012:
请问··我如果要调试H2数据库来分析其JOIN算法应该怎么做呢 ...
H2笔记 -
carlosfu:
很好很全,很有收获
Spring3笔记之 JDBC -
ponlya:
coldrush 写道看了你的配置 ,刚绝 file:后加绝对 ...
添加使用dtd文件 -
ponlya:
byp19980911 写道这不是很好的解决办法,最好是使用连 ...
java.net.SocketException:Software caused connection abort: socket write error -
ponlya:
ayanami001 写道为什么spring没有封装分页吗,那 ...
Spring3笔记之 JDBC(分页)
Bean scopes 作用域
5个:singleton,prototype,request,session,global session
singleton 是默认的作用域,容器只产生一个实例,只要调用的id相同,返回的实例就是同一个;
prototype 每次调用返回的是不同的实例;
Request, session, and global session scopes 这三个是WEB方面使用的,使用于基于web的Spring ApplicationContext实现(如XmlWebApplicationContext)
前二个
com.spring305.test.scope.po.SingletonScope.java
com.spring305.test.scope.po.PrototypeScope.javapublic class SingletonScope {
private int id = (int) (100 * Math.random());
public void printID() {
System.out.println(SingletonScope.class + " id=" + id);
}
}
public class PrototypeScope { private int id = (int) (100 * Math.random()); public void printID() { System.out.println(PrototypeScope.class + " id=" + id); } }
src/testScope.xml
<bean id="singletonScope" class="com.spring305.test.scope.po.SingletonScope"></bean> <bean id="prototypeScope" class="com.spring305.test.scope.po.PrototypeScope" scope="prototype"></bean>
测试:
@Test public void testSingletonProtoType(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("testScope.xml"); SingletonScope singletonScope1 = ctx.getBean("singletonScope",SingletonScope.class); SingletonScope singletonScope2 = ctx.getBean("singletonScope",SingletonScope.class); PrototypeScope prototypeScope1 = ctx.getBean("prototypeScope",PrototypeScope.class); PrototypeScope prototypeScope2 = ctx.getBean("prototypeScope",PrototypeScope.class); singletonScope1.printID(); singletonScope2.printID(); prototypeScope1.printID(); prototypeScope2.printID(); }
得到结果:
class com.spring305.test.scope.po.SingletonScope id=89 class com.spring305.test.scope.po.SingletonScope id=89 class com.spring305.test.scope.po.PrototypeScope id=12 class com.spring305.test.scope.po.PrototypeScope id=50
singleton的值没有变化,而prototype的变化
再看后三种:
web.xml中加入spring Listener
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <!-- classpath:applicationContext.xml --> <param-value>/WEB-INF/testScope.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> <servlet> <servlet-name>ScopeTest</servlet-name> <servlet-class> com.spring305.test.scope.po.ScopeTest </servlet-class> </servlet> <servlet-mapping> <servlet-name>ScopeTest</servlet-name> <url-pattern>/ScopeTest</url-pattern> </servlet-mapping>
/WEB-INF/testScope.xml
<bean id="singletonScope" class="com.spring305.test.scope.po.SingletonScope"></bean> <bean id="prototypeScope" class="com.spring305.test.scope.po.PrototypeScope" scope="prototype"></bean> <bean id="requestScopeT" class="com.spring305.test.scope.po.RequestScope" scope="request"></bean> <bean id="sessionScopeT" class="com.spring305.test.scope.po.SessionScope" scope="session"></bean> <bean id="globalSessionScope" class="com.spring305.test.scope.po.GlobalSessionScope" scope="globalSession"></bean>
servlet doGet内容如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); System.out.println("in get"); ServletContext context = getServletContext(); ApplicationContext ctx = null; if (ctx == null) { ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context); } /** * SingletonScope singletonScope1 = ctx.getBean("singletonScope",SingletonScope.class); SingletonScope singletonScope2 = ctx.getBean("singletonScope",SingletonScope.class); PrototypeScope prototypeScope1 = ctx.getBean("prototypeScope",PrototypeScope.class); PrototypeScope prototypeScope2 = ctx.getBean("prototypeScope",PrototypeScope.class); singletonScope1.printID(); singletonScope2.printID(); prototypeScope1.printID(); prototypeScope2.printID(); */ RequestScope requestScope = (RequestScope) ctx.getBean("requestScopeT"); requestScope.printID(); SessionScope sessionScope = (SessionScope) ctx.getBean("sessionScopeT"); sessionScope.printID(); GlobalSessionScope gScope = (GlobalSessionScope)ctx.getBean("globalSessionScope",GlobalSessionScope.class); gScope.printID(); out.println("123"); out.flush(); out.close(); }
同一浏览器刷新二次得到结果:
in get class com.spring305.test.scope.po.RequestScope id=11 class com.spring305.test.scope.po.SessionScope id=50 class com.spring305.test.scope.po.GlobalSessionScope id=70 in get class com.spring305.test.scope.po.RequestScope id=92 class com.spring305.test.scope.po.SessionScope id=50 class com.spring305.test.scope.po.GlobalSessionScope id=70
可见,除了requet的值变化了,session,globalsession的都没有变
换个浏览器刷新下servlet
in get class com.spring305.test.scope.po.RequestScope id=96 class com.spring305.test.scope.po.SessionScope id=89 class com.spring305.test.scope.po.GlobalSessionScope id=38
相对而言,值都变化了,那么globalsession为什么也会变?官方给出解释:
The global session scope is similar to the standard HTTP Session scope (described above), and applies only in the context of portlet-based web applications
基于portlet的web应用中才有意义.
<!--EndFragment-->
发表评论
-
Spring整合Hibernate(摘录)
2011-05-07 09:48 742简要步骤From:http://blog.csdn.net/s ... -
Spring3笔记之 JDBC(分页)
2011-04-25 22:08 2017接上篇的实体,DAO接口,实现,测试及XML http://p ... -
Spring3笔记之 JDBC
2011-04-25 22:02 7813使用Spring 的JDBC 先创建表: DROP TAB ... -
Spring3笔记之 事务传播
2011-04-24 15:51 1210摘自:http://zhxing.iteye.com/blog ... -
Spring3笔记之 AOP
2011-04-24 14:24 1901Spring AOP部分使用JDK动态代理或者CGLIB来为目 ... -
Spring3笔记之 AOP Cglib 代理
2011-04-24 14:13 1356JDK的Proxy实现代理要求 ... -
Spring3笔记之 AOP JDK 代理
2011-04-24 14:09 1053使用JDK代理,代理对象必须实现一接口 com.spring ... -
Spring3之 Resource
2011-04-21 22:49 3976主要是org.springframework.core.io. ... -
Spring3之 bean 注解
2011-04-20 22:18 1503小记下,spring注解相关: com.spring305. ... -
Spring3之 bean 定制bean特性
2011-04-19 21:10 1292Customizing the nature of a bea ... -
Spring3之 bean Method injection
2011-04-17 20:04 1459Method injection(方法注入) bean都是s ... -
Spring3之 bean AutoWire
2011-04-17 12:01 5937Autowiring collaborators 自动装配 ... -
Spring3之 bean depends-on
2011-04-17 08:56 3273depends-on depend-on用来表 ... -
Spring3之 bean Lazy-initialized beans
2011-04-17 08:48 1971Lazy-initialized beans延迟 ... -
Spring3之 集合对象属性注入
2011-04-16 23:17 1209com.spring305.test.beanInit.cpo ... -
Spring3之 bean idref?
2011-04-16 18:39 965很是奇怪idref是干什么 ... -
Spring3之 bean简单属性注入
2011-04-16 17:40 1365DI (依赖注入)有二种: Constructor-based ... -
Spring3之 实例化bean2
2011-04-16 14:30 1015Spring3之 bean命名(http://ponlya.i ... -
Spring3之 bean命名
2011-04-16 11:36 2008一、bean的命名采用标准Java命名约定:小写字母开头,首字 ... -
Spring3之 IoC容器的实例化
2011-04-16 08:39 1516Bean:在Spring中,那些组成你应用程序的主体(ba ...
相关推荐
spring bean 的作用域(scope), SPringle bean的作用域
在Spring中,有五种主要的Bean作用域: 1. **Singleton作用域**: - Singleton是Spring默认的Bean作用域。这意味着,无论何时,只要Spring容器被初始化,它都会创建一个Bean实例,并将其缓存起来。后续对相同ID的...
换言之,当把一个 bean 定义设置为 singleton 作用域时,Spring IoC 容器只会创建该 bean 定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该 bean 的后续请求和引用都将返回被...
Spring Bean 的作用域之间有什么区别:Bean的作用域: 可以通过scope 属性来指定bean的作用域 ①singleton: 默认值。当IOC容器
在Spring框架中,Bean的作用域是决定如何管理和创建Bean实例的关键概念。本篇文章将深入探讨两种主要的作用域:singleton和prototype,并通过实例分析其用法和注意事项。 首先,`singleton`是Spring默认的作用域,...
3. **请求(Request)作用域**:在Web应用中,当Bean的作用域设定为请求时,Spring会在每个HTTP请求中创建一个Bean实例。这意味着在同一个请求内,所有对Bean的引用都指向同一个实例,而不同的请求会有不同的实例。 ...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
### Spring框架中Bean的作用域详解 #### 一、引言 在Spring框架中,Bean的作用域(scope)是一项非常重要的特性,它决定了...合理地利用Bean作用域不仅可以提升应用程序的性能,还能增强代码的可维护性和可扩展性。
Spring提供了五种不同的Bean作用域,每种都有其特定的使用场景和行为。 1. **Singleton作用域**:这是Spring的默认作用域,意味着无论何时从容器中请求一个特定的Bean,都会返回同一个实例。在配置文件中,可以使用...
Bean元素有一个scope属性,用于定义Bean的作用域,该属性有如下五个值: 1>singleton: 单例模式,在整个spring IOC容器中,单例模式作用域的Bean都将只生成一个实例。一般Spring容器默认Bean的作用域为singleton ...
在 Spring 配置文件中,可以使用 `<bean>` 元素的 `scope` 属性将 Bean 的作用域定义成 singleton。 ```xml <bean id="person" class="com.mengma.scope.Person" scope="singleton"/> ``` 2. Prototype 作用域 ...
SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...
spring 中的 scope 作用域是指在spring 框架中,bean 的实例化和生命周期的管理。Scope 作用域决定了 bean 的实例化方式、生命周期和作用域。 singleton 作用域 ----------------- 在 spring 中,默认的作用域是 ...
在Spring框架中, Bean的作用域(Scope)是指Bean的生命周期范围。 Spring框架提供了五种作用域:Singleton(单例)、Prototype(原型)、Request(请求)、Session(会话)和GlobalSession(全局会话)。其中,...
此外,Spring还提供了自定义Scope的机制,开发者可以根据需求定义自己的Bean作用域。 为了深入学习这个主题,可以参考提供的博文链接(虽然这里没有给出具体的链接内容,通常这些链接会包含博主的个人理解和实践...
BeanFactory是Spring的基础容器,它提供bean的实例化、作用域、依赖注入、生命周期管理等功能。ApplicationContext则是在BeanFactory基础上扩展,增加了更多企业级服务,如消息处理、国际化、应用事件等。 **Bean的...
在`SSHnote_Spring_6_Scope`这个文件中,可能包含了关于如何在XML配置文件中定义不同作用域的Bean,以及如何在代码中注入和使用这些Bean的示例和解释。通过学习这部分内容,开发者可以更好地掌握Spring框架的核心...
3. **作用域** - **Singleton**:Spring容器中只会存在一个Bean实例,所有对Bean的请求都会返回同一个实例。 - **Prototype**:每次请求都会创建一个新的Bean实例。 - **Request**:在Web应用中,每个HTTP请求...
3. **Bean的作用域**: 在注册时,Spring会根据@Bean、@Scope等注解确定Bean的作用域。默认情况下,Bean是单例(Singleton),但也可以配置为原型(Prototype)或其他作用域。 4. **Bean的依赖解析**: Spring会...