- 浏览: 16660 次
- 性别:
- 来自: 齐齐哈尔
最新评论
Bean配置信息是Bean的元数据信息,它由4个方面组成:Bean的实现类、Bean的属性信息、Bean的依赖关系和Bean的行为配置。
Bean元数据信息在Spring容器中的内部对应是由一个个BeanDefinition形成的Bean注册表,Spring实现了Bean元数据信息内部表示和外部表示的解耦。Spring支持多种形式Bean的配置方式。Bean配置信息定义了Bean的实现及依赖关系,Sprign容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后讲这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用。
基于XML的配置
采用基于Schema配置格式,文件头的声明会复杂一些。
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
</beans>
Schema在文档根节点中通过xmlns对文档中的命名空间进行声明。我们在上面的代码中定义了3个命名空间:
1.默认命名空间:没有空间名,用于Spring Bean的定义
2.xsi命名空间:这个命名空间用于为每个文档中命名空间指定相应的Schema样式文件,是标准组织定义的标准命名空间
3.aop命名空间:这个命名空间是Spring配置AOP的命名空间,是用户自定义的命名空间
命名空间的定义分为两个步骤:第一步指定命名空间的名称,第二步指定命名空间的Schema文档样式文件的位置,用空格或回车换行进行分隔
若命名空间的别名为空,则表示该命名空间为文档默认命名空间,文档中无命名空间前缀的元素都属于默认命名空间。
命名空间使用全限定名,每个组织机构在发布Schema文件后,都会为该Schema文件提供一个引用的URL地址,一般使用这个URL地址指定命名空间对应的Schema文件。命名空间名称和对应的Schema文件地址之间使用空格或回车分隔,不同的命名空间之间也使用这种分隔方法。
Bean的命名:在配置一个Bean时,需要为其指定一个id属性作为Bean的名称。id在IoC容器中必须是唯一的,此外id的命名需要满足XML对id的命名规范:必须以字母开始、后面可以是字母、数字、连字符、下划线、句号、冒号等完整结束符,逗号和空格这些非完整结束符是非法的。
Spring配置文件不允许出现两个相同id的<bean>,但却可以出现两个相同name的<bean>,若出现多个相同name的<bean>,通过getBean(beanName)时,返回最后声明的那个Bean。
属性注入要求bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。若在类中显式定义了一个带参的构造函数,则需要同时提供一个默认的构造函数。Spring只会检查Bean中是否有对应的setter方法,只有Bean中是否有对应的属性变量则不做要求。
JavaBean关于属性命名的特殊规范:JavaBean的属性变量名都以小写字母起头,但也允许大写字母开头的属性变量名,但必须满足变量的前两个字母要么全大写,要么全小写。
使用构造函数注入的前提是Bean必须提供带参的构造函数。
//通过类型匹配参数
public class Car{
public Car(String brand,double price){
this.brand=brand;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg type="java.lang.String">
<value>CA72</value>
</construtor-arg>
<constructor-arg type="double">
<value>20000</value>
</construtor-arg>
</bean>
//通过索引匹配参数
public class Car{
public Car(String brand,String corp,double price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg index="0" value="CA72" />
<constructor-arg index="1" value="CHINA" />
<constructor-arg index="2" value=20000 />
</bean>
//通过使用索引和类型匹配参数
public class Car{
public Car(String brand,String corp,double price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
public class Car{
public Car(String brand,String corp,int price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg index="0" type="java.lang.String">
<value>CA72</value>
</construtor-arg>
<constructor-arg index="1" type="java.lang.String">
<value>CHINA</value>
</construtor-arg>
<constructor-arg index="2" type="double">
<value>20000</value>
</construtor-arg>
</bean>
通过自身类型反射匹配入参:若Bean构造函数入参的类型是可辨别的,即使构造函数注入配置不提供类型和索引信息,Spring依旧可以正确地完成构造函数的注入工作。
XML共有5个特殊的字符,若配置文件中的注入值包括这些特殊字符,需要进行特别处理。
XML特殊实体符号
特殊符号 转义序列 特殊符号 转义序列
< < " "
> > ' &apos
& &
<ref>可以通过一下三个属性引用容器中其他Bean
bean:通过该属性可以引用同一容器或父容器的Bean
local:通过该属性只能引用同一配置文件中定义的Bean,它可以利用XML解析器自动检验引用的合法性,以便在开发编写配置时能够及时发现并纠正配置的错误。
parent:引用父容器中的Bean
Spring使用跟一个专用的<null/>元素标签作为null值。
<list>
<value></value>
<value></value>
</list>
<set>
<value></value>
<value></value>
</set>
<map>
<entry>
<key><value></value></key>
<value></value>
</entry>
<entry>
<key><value></value></key>
<value></value>
</entry>
</map>
<property>
<props>
<prop key=""></pro>
<prop key=""></pro>
</props>
</property>
集合合并:允许子<bean>继承父<bean>的同名属性集合元素,并将子<bean>中配置的结合属性值和父<bean>中配置的同名属性值合并起来作为最终的bean值。
<bean id="parentBoss" abstract-"true" class="Boss">
<property name="favorites">
<set>
<value>Read</value>
<value>Run</value>
</set>
</property>
</bean>
<bean id="childBoss" parent="parentBoss">
<property name="favorites">
<set merge="true">
<value>Swim</value>
<value>Sing</value>
</set>
</property>
</bean>
若需配置一个集合类型的Bean,为非一个集合类型的属性,可以通过util命名空间进行配置。
<util:list id="" list-class="">
<value>Swim</value>
<value>Sing</value>
</util:list>
为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。
例:使用p明明空间
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="car" class=""
p:brand=""
p:maxSpeed=""
/>
</beans>
<bean>元素提供改了一个指定自动装配类型的属性:autowire="<自动装配类型>"。Spring提供了4种自动装配类型。
byName:根据名称进行自动匹配
byType:根据类型进行自动匹配
constructor:与ByType类似,只不是针对构造函数注入而言
autodetect:根据Bean的自省机制决定采用byType还是constructor进行自动装配
lookup方法注入
public interface MagicBoss{
Car getCar();
}
<bean id="car" class="Car"
p:brand=""
p:price=""
scope="prototype"
/>
<bean id="magicBoss" class="MagicBoss">
<lookup-method name="getCar" bean="car" />
</bean>
方法替换
用于替换他人的bean必须实现MethodReplacer接口,Spring将利用该接口方法去替换目标Bean的方法。
public class Boss1{
public Car getCar(){
Car car = new Car();
car.setBrand("BMWZ4");
return car;
}
}
public class Boss2 implements MethodReplacer{
public Object reimplement(Object arg0,Method arg1,Object[] arg2) throws Throwable{
Car car = new Car();
car.setBrand("BENZ");
return car;
}
}
<bean id="boss1" class="Boss1">
<replace-method name="getCar" replacer="boss2" />
</bean>
<bean id="boss2" class="Boss2" />
bean之间的关系有继承、依赖和引用。
继承:父<bean>的主要功能是简化子<bean>的配置。一般都将父<bean>设为abstract类,表示为这个<bean>不实例化为对应的Bean。
<bean id="abstractCar" class="Car"
p:brand="BMWZ4"
p:maxSpeed=250
abstract="true"
/>
<bean id="Car1" parent="abstractCar" p:color="red" />
<bean id="Car2" parent="abstractCar" p:color="black" />
依赖:使用<ref>元素标签建立对其他bean的依赖关系,Spring负责管理这些Bean的关系,当实例化一个Bean时,Spring保证该Bean所依赖的其他Bean已经初始化。Spring允许用户通过depends-on属性指定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好。
public class SystemSettings{
public static int SESSION_TIMEOUT=30;
public static int REFRESH_CYCLE=60;
}
public class SysInit{
public SysInit(){
SystemSettings.SESSION_TIMEOUT=10;
SystemSettings.REFRESH_CYCLE=100;
}
}
public class CacheManager{
public CacheManager(){
Timer timer = new Timer();
TimerTash cacheTask = new CacheTask();
timer.schedule(cacheTask,0,SystemSettings.REFRESH?_CYCLE);
}
}
<bean id="manager" class="CacheManager" depends-on="sysInit" />
<bean id="sysInit" class="SysInit" />
引用:Spring提供了一个<idref>标签,通过<idref>引用跟另一个<bean>的名字
<bean id="car" class="Car">
<bean id="boss" class="Boss">
<property name="carId">
<idref bean="car" />
</property>
</bean>
整合多个配置文件:Spring允许我们通过<import>将多个配置文件引入到一个文件中,进行配置文件的集成。
<import resource="classpath:com/beans1.xml">
Bean的作用域类型
类别 说明
singleton 在Sprign IoC容器中仅存在一个Bean实例,Bean以单实例的方式存在
prototype 每次从容器中调用Bean时,都返回一个新的实例
request 每次HTTP Session请求都会创建一个新的Bean,仅适用于WebApplicationContxt环境
session 同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean,仅适用于WebApplicationContxt环境
globalSession 同一个全局Session共享一个Bean,一般用于porlet应用环境,仅适用于WebApplicationContxt环境
Spring还允许用户自定义Bean的作用域,可以通过org.springframework.beans.factory.config.Scope接口定义新的作用域,再通过org.springframeworl.beans.factory.config.CustomScopeConfigure总金额个BeanFactoryPostProcessor注册自定义的Bean作用域。
singleton作用域
无状态或状态不可变的类适合使用单实例模式。在Spring环境下,对于所有的Dao类都可以采用单实例模式。在默认情况下,Spring的ApplicationContext容器在启动时,自动实例化所有singleton的Bean并缓存于容器中。虽然在启动时会花费一些时间,但带来两个好处:首先对Bean提前的实例化操作会及早发现一些潜在的配置问题;其次Bean以缓存的方式保存,当运行期使用到该Bean时就无须再实例化了,加快了运行效率。若用户不希望在容器启动时提前实例化singleton的Bean,可以通过lazy-init属性进行控制:
<bean id="boss1" class="Boss" lazy-init="true" />
prototype作用域:采用scope="prototype"指定非单实例作用域的Bean。在默认的情况下,Spring容器在启动时不实例化prototype的Bean。此外,Spring容器将prototype的Bean交给调用者,就不再管理它的生命周期了。
Web应用环境相关的Bean作用域
若用户使用Spring的WebApplicationContext,则还可使用另外3种Bean的作用域:request、session和globalSession。不过使用这些作用域之前,首先必须在Web容器中进行一些额外的配置。
在Web容器中进行额外的配置
在低版本的Web容器中,用户可以使用HTTP请求过滤器进行配置
<web-app>
...
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
在高版本的Web容器中,则可以利用HTTP请求监听器进行配置
<web-app>
...
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
...
</web-app>
Bean元数据信息在Spring容器中的内部对应是由一个个BeanDefinition形成的Bean注册表,Spring实现了Bean元数据信息内部表示和外部表示的解耦。Spring支持多种形式Bean的配置方式。Bean配置信息定义了Bean的实现及依赖关系,Sprign容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后讲这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用。
基于XML的配置
采用基于Schema配置格式,文件头的声明会复杂一些。
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
</beans>
Schema在文档根节点中通过xmlns对文档中的命名空间进行声明。我们在上面的代码中定义了3个命名空间:
1.默认命名空间:没有空间名,用于Spring Bean的定义
2.xsi命名空间:这个命名空间用于为每个文档中命名空间指定相应的Schema样式文件,是标准组织定义的标准命名空间
3.aop命名空间:这个命名空间是Spring配置AOP的命名空间,是用户自定义的命名空间
命名空间的定义分为两个步骤:第一步指定命名空间的名称,第二步指定命名空间的Schema文档样式文件的位置,用空格或回车换行进行分隔
若命名空间的别名为空,则表示该命名空间为文档默认命名空间,文档中无命名空间前缀的元素都属于默认命名空间。
命名空间使用全限定名,每个组织机构在发布Schema文件后,都会为该Schema文件提供一个引用的URL地址,一般使用这个URL地址指定命名空间对应的Schema文件。命名空间名称和对应的Schema文件地址之间使用空格或回车分隔,不同的命名空间之间也使用这种分隔方法。
Bean的命名:在配置一个Bean时,需要为其指定一个id属性作为Bean的名称。id在IoC容器中必须是唯一的,此外id的命名需要满足XML对id的命名规范:必须以字母开始、后面可以是字母、数字、连字符、下划线、句号、冒号等完整结束符,逗号和空格这些非完整结束符是非法的。
Spring配置文件不允许出现两个相同id的<bean>,但却可以出现两个相同name的<bean>,若出现多个相同name的<bean>,通过getBean(beanName)时,返回最后声明的那个Bean。
属性注入要求bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。若在类中显式定义了一个带参的构造函数,则需要同时提供一个默认的构造函数。Spring只会检查Bean中是否有对应的setter方法,只有Bean中是否有对应的属性变量则不做要求。
JavaBean关于属性命名的特殊规范:JavaBean的属性变量名都以小写字母起头,但也允许大写字母开头的属性变量名,但必须满足变量的前两个字母要么全大写,要么全小写。
使用构造函数注入的前提是Bean必须提供带参的构造函数。
//通过类型匹配参数
public class Car{
public Car(String brand,double price){
this.brand=brand;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg type="java.lang.String">
<value>CA72</value>
</construtor-arg>
<constructor-arg type="double">
<value>20000</value>
</construtor-arg>
</bean>
//通过索引匹配参数
public class Car{
public Car(String brand,String corp,double price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg index="0" value="CA72" />
<constructor-arg index="1" value="CHINA" />
<constructor-arg index="2" value=20000 />
</bean>
//通过使用索引和类型匹配参数
public class Car{
public Car(String brand,String corp,double price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
public class Car{
public Car(String brand,String corp,int price){
this.brand=brand;
this.corp=corp;
this.price=price;
}
}
<bean id="car" class="com.Car">
<constructor-arg index="0" type="java.lang.String">
<value>CA72</value>
</construtor-arg>
<constructor-arg index="1" type="java.lang.String">
<value>CHINA</value>
</construtor-arg>
<constructor-arg index="2" type="double">
<value>20000</value>
</construtor-arg>
</bean>
通过自身类型反射匹配入参:若Bean构造函数入参的类型是可辨别的,即使构造函数注入配置不提供类型和索引信息,Spring依旧可以正确地完成构造函数的注入工作。
XML共有5个特殊的字符,若配置文件中的注入值包括这些特殊字符,需要进行特别处理。
XML特殊实体符号
特殊符号 转义序列 特殊符号 转义序列
< < " "
> > ' &apos
& &
<ref>可以通过一下三个属性引用容器中其他Bean
bean:通过该属性可以引用同一容器或父容器的Bean
local:通过该属性只能引用同一配置文件中定义的Bean,它可以利用XML解析器自动检验引用的合法性,以便在开发编写配置时能够及时发现并纠正配置的错误。
parent:引用父容器中的Bean
Spring使用跟一个专用的<null/>元素标签作为null值。
<list>
<value></value>
<value></value>
</list>
<set>
<value></value>
<value></value>
</set>
<map>
<entry>
<key><value></value></key>
<value></value>
</entry>
<entry>
<key><value></value></key>
<value></value>
</entry>
</map>
<property>
<props>
<prop key=""></pro>
<prop key=""></pro>
</props>
</property>
集合合并:允许子<bean>继承父<bean>的同名属性集合元素,并将子<bean>中配置的结合属性值和父<bean>中配置的同名属性值合并起来作为最终的bean值。
<bean id="parentBoss" abstract-"true" class="Boss">
<property name="favorites">
<set>
<value>Read</value>
<value>Run</value>
</set>
</property>
</bean>
<bean id="childBoss" parent="parentBoss">
<property name="favorites">
<set merge="true">
<value>Swim</value>
<value>Sing</value>
</set>
</property>
</bean>
若需配置一个集合类型的Bean,为非一个集合类型的属性,可以通过util命名空间进行配置。
<util:list id="" list-class="">
<value>Swim</value>
<value>Sing</value>
</util:list>
为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。
例:使用p明明空间
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="car" class=""
p:brand=""
p:maxSpeed=""
/>
</beans>
<bean>元素提供改了一个指定自动装配类型的属性:autowire="<自动装配类型>"。Spring提供了4种自动装配类型。
byName:根据名称进行自动匹配
byType:根据类型进行自动匹配
constructor:与ByType类似,只不是针对构造函数注入而言
autodetect:根据Bean的自省机制决定采用byType还是constructor进行自动装配
lookup方法注入
public interface MagicBoss{
Car getCar();
}
<bean id="car" class="Car"
p:brand=""
p:price=""
scope="prototype"
/>
<bean id="magicBoss" class="MagicBoss">
<lookup-method name="getCar" bean="car" />
</bean>
方法替换
用于替换他人的bean必须实现MethodReplacer接口,Spring将利用该接口方法去替换目标Bean的方法。
public class Boss1{
public Car getCar(){
Car car = new Car();
car.setBrand("BMWZ4");
return car;
}
}
public class Boss2 implements MethodReplacer{
public Object reimplement(Object arg0,Method arg1,Object[] arg2) throws Throwable{
Car car = new Car();
car.setBrand("BENZ");
return car;
}
}
<bean id="boss1" class="Boss1">
<replace-method name="getCar" replacer="boss2" />
</bean>
<bean id="boss2" class="Boss2" />
bean之间的关系有继承、依赖和引用。
继承:父<bean>的主要功能是简化子<bean>的配置。一般都将父<bean>设为abstract类,表示为这个<bean>不实例化为对应的Bean。
<bean id="abstractCar" class="Car"
p:brand="BMWZ4"
p:maxSpeed=250
abstract="true"
/>
<bean id="Car1" parent="abstractCar" p:color="red" />
<bean id="Car2" parent="abstractCar" p:color="black" />
依赖:使用<ref>元素标签建立对其他bean的依赖关系,Spring负责管理这些Bean的关系,当实例化一个Bean时,Spring保证该Bean所依赖的其他Bean已经初始化。Spring允许用户通过depends-on属性指定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好。
public class SystemSettings{
public static int SESSION_TIMEOUT=30;
public static int REFRESH_CYCLE=60;
}
public class SysInit{
public SysInit(){
SystemSettings.SESSION_TIMEOUT=10;
SystemSettings.REFRESH_CYCLE=100;
}
}
public class CacheManager{
public CacheManager(){
Timer timer = new Timer();
TimerTash cacheTask = new CacheTask();
timer.schedule(cacheTask,0,SystemSettings.REFRESH?_CYCLE);
}
}
<bean id="manager" class="CacheManager" depends-on="sysInit" />
<bean id="sysInit" class="SysInit" />
引用:Spring提供了一个<idref>标签,通过<idref>引用跟另一个<bean>的名字
<bean id="car" class="Car">
<bean id="boss" class="Boss">
<property name="carId">
<idref bean="car" />
</property>
</bean>
整合多个配置文件:Spring允许我们通过<import>将多个配置文件引入到一个文件中,进行配置文件的集成。
<import resource="classpath:com/beans1.xml">
Bean的作用域类型
类别 说明
singleton 在Sprign IoC容器中仅存在一个Bean实例,Bean以单实例的方式存在
prototype 每次从容器中调用Bean时,都返回一个新的实例
request 每次HTTP Session请求都会创建一个新的Bean,仅适用于WebApplicationContxt环境
session 同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean,仅适用于WebApplicationContxt环境
globalSession 同一个全局Session共享一个Bean,一般用于porlet应用环境,仅适用于WebApplicationContxt环境
Spring还允许用户自定义Bean的作用域,可以通过org.springframework.beans.factory.config.Scope接口定义新的作用域,再通过org.springframeworl.beans.factory.config.CustomScopeConfigure总金额个BeanFactoryPostProcessor注册自定义的Bean作用域。
singleton作用域
无状态或状态不可变的类适合使用单实例模式。在Spring环境下,对于所有的Dao类都可以采用单实例模式。在默认情况下,Spring的ApplicationContext容器在启动时,自动实例化所有singleton的Bean并缓存于容器中。虽然在启动时会花费一些时间,但带来两个好处:首先对Bean提前的实例化操作会及早发现一些潜在的配置问题;其次Bean以缓存的方式保存,当运行期使用到该Bean时就无须再实例化了,加快了运行效率。若用户不希望在容器启动时提前实例化singleton的Bean,可以通过lazy-init属性进行控制:
<bean id="boss1" class="Boss" lazy-init="true" />
prototype作用域:采用scope="prototype"指定非单实例作用域的Bean。在默认的情况下,Spring容器在启动时不实例化prototype的Bean。此外,Spring容器将prototype的Bean交给调用者,就不再管理它的生命周期了。
Web应用环境相关的Bean作用域
若用户使用Spring的WebApplicationContext,则还可使用另外3种Bean的作用域:request、session和globalSession。不过使用这些作用域之前,首先必须在Web容器中进行一些额外的配置。
在Web容器中进行额外的配置
在低版本的Web容器中,用户可以使用HTTP请求过滤器进行配置
<web-app>
...
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
在高版本的Web容器中,则可以利用HTTP请求监听器进行配置
<web-app>
...
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
...
</web-app>
相关推荐
spring_dubbo spring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_...
JavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源代码 Spring_AdvicesJavaEE源...
2. 创建一个实现了`Printer`接口的具体打印机类,例如`ConcretePrinter`。 3. 使用`@Component`注解标记`ConcretePrinter`,将其注册到Spring容器中。 4. 定义一个切面类,包含切面逻辑,比如`PrintingAspect`,并...
《 Beginning_Spring_Boot_2 》是一本专为初学者设计的...Spring_Boot_2_Tutorial.pdf这个文档很可能是本书的电子版,读者可以通过阅读其中的内容,逐步掌握Spring Boot 2的精髓,成为一名熟练的Spring Boot开发者。
2. **AOP(Aspect Oriented Programming,面向切面编程)**:Spring支持AOP,允许开发者定义“切面”,将关注点如日志记录、事务管理等从主业务逻辑中分离出来,提高代码的可维护性和可复用性。 3. **Bean容器**:...
spring_light_2 spring_light_2 spring_light_2 spring_light_2
2. **spring-beans.jar**: 这是Spring的核心组件之一,包含了Bean工厂和ApplicationContext的相关实现。Bean工厂负责创建、配置和管理应用中的对象,而ApplicationContext则扩展了Bean工厂,增加了国际化、事件...
轻量级Java_EE企业应用实战_Struts_2+Spring_3+Hibernate整合开发_第3版_mk.part1
标题中的"Spring_2000_Spring_Hibernate_HibernateTemplate"显然指的是一个关于Spring框架、Hibernate ORM框架以及其在2000年左右的版本或应用方式的专题。在这个主题下,我们将深入探讨Spring框架的核心特性,以及...
spring_jiemi _2王福强 spring_jiemi _2王福强
包含spring全家桶 包括spring_web spring_webmvc 两个jar 包 包括AspectJ com.springsource.net.sf.cglib-sources-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar ...JAR包等 十分齐全
《Spring框架开发指南》 Spring Framework是Java平台上广泛使用的开源框架,它为构建高质量、可维护的Java应用程序提供了全面的支持。本指南旨在深入探讨Spring框架的核心特性及其在实际开发中的应用,帮助开发者...
2. **配置文件**:如`applicationContext.xml`或`@Configuration`注解的Java类,用于定义Bean及其依赖关系。 3. **测试代码**:可能包含`src/test`目录下的JUnit测试类,使用`@RunWith(SpringRunner.class)`注解来...
- `spring_hibernate_2`可能包含Spring整合Hibernate的示例,Spring提供了一套完整的数据访问抽象,包括JDBC、ORM(对象关系映射)和OXM(对象XML映射)。 - 通过Spring,你可以实现声明式事务管理,使得数据库...
spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...
2. 数据访问:介绍Spring与各种数据存储的集成,如JDBC、ORM框架(Hibernate、MyBatis),以及Spring Data,它简化了数据访问层的开发。 3. 测试:讨论如何使用Spring的测试框架进行单元测试和集成测试,以及Mockito...
2. **IoC容器**:IoC(Inversion of Control)是DI的另一种表述,Spring的IoC容器负责创建对象,管理它们的生命周期,以及处理对象间的依赖关系。 3. **AOP(面向切面编程)**:Spring支持AOP,允许开发者定义“切...
在"spring_aop.rar_spring_aop"这个实例工程中,可能包含了两个部分,"spring-aop-1"和"spring-aop-2",它们可能分别展示了不同的AOP应用场景或者使用策略。例如: - "spring-aop-1"可能是一个基础的AOP示例,演示...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建控制器层,实现模型-视图-控制器(MVC)的设计模式。这个“spring_mvc.zip”压缩包很可能是为了帮助初学者快速入门...
在描述中提到的“Java_Spring_Swagger_Eclipse4_5_2”,意味着这个项目是在Eclipse IDE 4.5.2版本下进行的,这是一个流行的Java开发环境,支持各种插件和工具,包括对Spring框架的良好支持。 【标签】"Java_Spring_...