- 浏览: 548885 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
【转载】CSS圆角按钮(一) -
saiarmuluo:
不错,支持。
java log4j日志 写入数据库 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Freemarker 使用 -
zlbdexiaohao:
棒棒的
flex ToolTip汇总 -
hw_128:
demo的代码的,能不能发一下,谢谢 qq257515270 ...
java log4j日志 写入数据库
一般都知道spring2.x bean的作用域
Bean作用域
singleton |
在每个Spring IoC容器中一个bean定义对应一个对象实例。 |
prototype |
一个bean定义对应多个对象实例。 |
request |
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring |
session |
在一个HTTP |
global session |
在一个全局的HTTP |
看完官网文档明白了,spring2.xbean的作用域可以自定义作用域,甚至重新定义现有的作用域(不提倡这么做,而且你不能覆盖内置的singleton
和prototype
作用域)。
spring bean 自定义作用域
作用域由接口org.springframework.beans.factory.config.Scope
定义。
要将你自己的自定义作用域集成到Spring容器中,需要实现该接口。它本身非常简单,只有两个方法,分别用于底层存储机制获取和删除对象。自定义作用域可能超出了本参考手册的讨论范围,但你可以参考一下Spring提供的Scope
实现,以便于去如何着手编写自己的Scope实现。
在实现一个或多个自定义Scope
并测试通过之后,接下来就是如何让Spring容器识别你的新作用域。ConfigurableBeanFactory
接口声明了给Spring容器注册新Scope
的主要方法。(大部分随Spring一起发布的BeanFactory
具体实现类都实现了该接口);
该接口的主要方法如下所示:
package org.springframework.beans.factory.config; import org.springframework.beans.factory.ObjectFactory; public interface Scope { public abstract Object get(String s, ObjectFactory objectfactory); public abstract Object remove(String s); public abstract void registerDestructionCallback(String s, Runnable runnable); public abstract String getConversationId(); }
1.实现 Scope 接口
package com.myscope; import java.util.HashMap; import java.util.Map; import org.springframework.beans.BeansException; import org.springframework.beans.factory.ObjectFactory; public class ThreadScope implements org.springframework.beans.factory.config.Scope{ private final ThreadLocal<Object> threadScope = new ThreadLocal<Object>() { protected Object initialValue() { return new HashMap<String, Object>(); } }; public Object get(String s, ObjectFactory objectfactory) throws BeansException{ Map<String, Object> scope = (Map<String, Object>) threadScope.get(); Object object = scope.get(s); if (object == null) { object = objectfactory.getObject(); scope.put(s, object); } return object; } public Object remove(String name) { Map<String, Object> scope = (Map<String, Object>) threadScope.get(); return scope.remove(name); } public String getConversationId() { return null; } public Object resolveContextualObject(String key) { return null; } public void registerDestructionCallback(String name, Runnable callback) { } }
2.通过工厂注册
applicationContext.getBeanFactory().registerScope("myScope", scope);
然后你就可以像下面这样创建与自定义Scope
的作用域规则相吻合的bean定义了:
<bean id="..." class="..." scope="myScope"/>
完整xml配置:
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> <property name="scopes"> <map> <entry key="thread" value="com.myscope.ThreadScope"/> </map> </property> </bean> <bean id="bar" class="com.demo1" scope="thread"> <property name="name" value="Rick"/> <aop:scoped-proxy/> </bean>
或者:
<bean id="myScope" class="com.myscope.ThreadScope"/> <bean id="customerScope" class="org.springframework.beans.factory.config.CustomScopeConfigurer"> <property name="scopes"> <map> <entry key="myScope"> <bean class="myScope"/> </entry> </map> </property> </bean> <bean id="usesScope" class="com.demo" scope="myScope"/>
发表评论
-
【转】java中volatile关键字的含义
2013-05-12 16:06 1008用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A ... -
java 收集
2012-10-22 09:16 0OpenSessionInViewFilter在查询完之后不提 ... -
java连接sql时候,获取表格各列属性
2012-10-19 18:09 0import java.sql.Connection; ... -
【转载】log4j 日志大小
2012-03-23 19:31 10660今天群里一个哥们问一 ... -
【转】java获取jar文件位置
2012-02-16 21:04 2038网络转载 在编程的时候如果在工程中无意中导入多个同样的jar ... -
java 逐位运算符
2012-01-22 16:53 4544运算符归类: 一元运算符:逻辑运算符(!),非运算符( ... -
hibernate hql
2011-12-15 20:05 0hibernate -hql 1.hql中最简单的查询 f ... -
Hibernate初探(二)
2011-12-15 16:32 38hql 关联查询fetch hql code: from Te ... -
hibernate 复合主键
2011-11-01 19:30 1360hibernate 复合主键 在实体中可以定义一个嵌入式组件( ... -
28234行的java 类文件
2011-08-29 16:04 936有图为证:28234行的java 类文件 各位有没有???见过 ... -
递归显示文件夹下文件
2011-08-10 14:43 920public static void main(String[ ... -
java.lang.UnsupportedClassVersionError异常解决办法
2011-06-14 14:32 1531出现错误的原因: 是因为我们使用高版本的JDK编译的Java ... -
内部类修改外部类属性
2011-06-10 16:55 5709public class Test { public Str ... -
java log4j日志 写入数据库
2011-06-01 20:57 11305因一个群朋友log4j日志 ... -
eclipse改图片
2011-05-14 08:44 1233例如:eclipse目录在 D:\rd\eclipse3.3 ... -
【转载】<s:doubleselect>标签的使用
2011-01-05 08:49 5498本文装载自:http://karidyang.iteye.co ... -
spirng2.x-入门
2011-01-04 09:50 957Spring 2.5 中除了提供 @Component 注释外 ... -
自定义 StringUtil 处理类
2011-01-04 09:41 1186isNumber //判读是不是数字 isDate//判读 ... -
Hibernate学习笔记--Criteria Query
2011-01-04 09:20 9198Criteria Query通过面向对 ... -
struts2 页面国际化
2010-12-29 15:24 1100//输出配置文件中的属性<s:text name=&qu ...
相关推荐
除了这些标准作用域,Spring还允许用户自定义作用域,以满足特定的应用场景需求。自定义作用域需要实现ApplicationContextAware接口来获取ApplicationContext,并通过实现Scope接口来定义作用域的行为。 理解并正确...
6. **自定义作用域**:Spring允许开发者定义自己的作用域,通过实现`Scope`接口并注册到ApplicationContext中。这为特殊场景提供了灵活性,比如定时任务或者特定事件触发的Bean。 了解了Bean的作用域后,开发者需要...
对于Singleton作用域的Bean,Spring会在容器启动时一次性实例化所有Bean。实例化顺序基于Bean的依赖关系和`@DependsOn`注解。如果Bean之间没有依赖关系,Spring将按照Bean定义的顺序实例化。对于Prototype作用域,...
`scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活运用,能帮助我们更好地控制Bean的行为,实现更高效、更可控的依赖管理和资源管理。通过...
在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...
在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、作用域等属性。这个阶段不涉及Bean的实际实例化,而是构建Bean的元数据。 2. **Bean实例化** 实例化是...
Spring的BeanDefinition是用来存储Bean的配置信息,包括Bean的类名、作用域、属性值、依赖的其他Bean、是否为单例、是否延迟加载等。这些信息在容器启动时解析并转化为BeanDefinition对象,后续的Bean实例化和管理都...
- **作用域的影响**:不同作用域(如singleton、prototype、request、session等)的Bean,其生命周期和创建方式都有所不同,需要根据应用场景选择合适的作用域。 - **懒加载**:如果Bean配置为`lazy-init="true"`,...
- Bean的作用域包括单例(`singleton`)、原型(`prototype`)、请求(`request`)、会话(`session`)等。默认情况下,Bean是单例的,即在整个应用中只有一个实例。 2. **Bean的加载过程** - 当Spring容器启动时...
此外,Spring还允许开发者自定义作用域,以满足特定的需求。 #### 三、Singleton作用域 **Singleton**是Spring中最常用的作用域之一。当一个Bean被定义为Singleton时,Spring容器只会为这个Bean创建一个实例,并将...
Spring还允许我们自定义Bean的作用域。默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`...
6. **作用域**:Spring Bean有多种作用域,如单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)。单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建新的实例。 7. **AOP**:...
Spring允许自定义作用域,开发者可以创建自己的作用域以及在自定义作用域中使用Bean。 1.6 自定义Bean的性质 Spring允许自定义Bean的生命周期回调、依赖以及作用域等。 1.6.1 生命周期回调 Spring管理Bean的生命...
4. **Bean的作用域**:Spring支持单例(Singleton)、原型(Prototype)、请求(Request)、session(Session)等多种作用域。不同作用域会影响Bean的创建和销毁时机。 5. **使用**:在完成初始化之后,Bean可以被...
5. **配置Bean作用域**:使用`@Scope`注解来定义Bean的作用域。默认情况下,Spring Bean是单例的。 ```java @Scope("prototype") @Service public class PrototypeService { // ... } ``` 6. **生命周期方法**:...
本文将深入探讨Spring如何处理循环依赖以及Bean的作用域。 **循环依赖** 循环依赖是指两个或多个Bean之间形成相互依赖的关系,使得在实例化过程中陷入死循环。例如,Bean A依赖于Bean B,同时Bean B也依赖于Bean A...
- **自定义作用域**:允许开发者自定义Bean的作用域。 #### Bean生命周期 Spring中的Bean具备生命周期回调接口,允许在Bean的初始化和销毁阶段执行特定操作。 - **初始化回调**:如InitializingBean接口和自定义...
在`DefaultListableBeanFactory`中,`doGetBean()`方法是获取Bean的核心实现,它会检查Bean是否存在、处理依赖注入、处理作用域等。通过跟踪源码,我们可以更深入地理解Spring的IoC(控制反转)和DI(依赖注入)机制...
Bean的作用域定义了Bean的生命周期以及Spring容器如何管理这些Bean的实例。Spring提供了多种作用域: 1. **Singleton**:单例模式,是Spring默认的作用域。在整个应用期间,Spring IoC容器只会为每个Bean定义创建一...
- Spring支持将原型作用域的Bean注入单例作用域的Bean中。 6. Spring Bean的作用域 - Spring容器中的Bean可以有不同的作用域。 - 默认作用域是单例(singleton),确保容器中只有一个共享实例。 - 除了单例作用...