Spring的xml中Bean配置的重写的应用

        在项目中采用Spring2.5+Hibernate+Struts2.0开发中采用Maven管理和构建,由于有一个Common项目中各种项目中采用代码和公用的配置,但是在其中一个项目中需要添加一个针对某个类的Hibernate的监听器,如果将这个公共的监听器的代码添加到Commons项目中,不仅增加的项目的代码,又不符合项目中的Commons项目的设计的真实意图,思索在采用重写Spring的bean的方法实现的SessionFactory的重写。

 

 

     在Commons项目中原有Spring Hibernate 等的一些公用的配置,重写的用法:

在公共项目(Commons项目)中将要重写的Spring bean  添加name的属性,在特殊需要的项目中添加Spring bean 将他的name属性名字命名和需要重写的Spring bean中name一致即可。Spring 发现Bean的名称相同采用最后加载的bean的覆盖原来的bean的,从而实现从写。

 

 

配置文件:

<?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:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
                     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                     http://www.springframework.org/schema/util
                     http://www.springframework.org/schema/util/spring-util-2.0.xsd">

 

 

1,<util:constant/>  
取代了之前通过FieldRetrevingFactoryBean获取bean静态常量的FactoryBean!  


老的用法  
Java代码   
  1. <bean id="..." class="...">  
  2.   <property name="isolation">  
  3.     <bean id="java.sql.Connection.TRANSACTION_SERIALIZABLE"  
  4.     class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />  
  5.   </property>  
  6. </bean>  


新用法  
Java代码   
  1. <bean id="..." class="...">  
  2.     <property name="isolation">  
  3.         <util:constant static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE"/>  
  4.     </property>  
  5. </bean>  


2,<util:property-path/>  
取代了之前通过PropertyPathFactoryBean来指定属性路径获取属性值的FactoryBean!  

老的用法  
Java代码   
  1. <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false">  
  2.   <property name="age" value="10"/>  
  3.   <property name="spouse">  
  4.     <bean class="org.springframework.beans.TestBean">  
  5.       <property name="age" value="11"/>  
  6.     </bean>  
  7.   </property>  
  8. </bean>  
  9.   
  10. <bean id="testBean.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>  



新的用法  
Java代码   
  1. <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false">  
  2.   <property name="age" value="10"/>  
  3.   <property name="spouse">  
  4.     <bean class="org.springframework.beans.TestBean">  
  5.       <property name="age" value="11"/>  
  6.     </bean>  
  7.   </property>  
  8. </bean>  
  9.   
  10. <util:property-path id="name" path="testBean.age"/>  



3,<util:properties/>  
替代了之前通过PropertiesFactoryBean来获取properties配制文件数据的FactoryBean!  


老用法  
Java代码   
  1. <bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
  2.   <property name="location" value="classpath:com/foo/jdbc-production.properties"/>  
  3. </bean>  



新用法  
Java代码   
  1. <util:properties id="jdbcConfiguration" location="classpath:com/foo/jdbc-production.properties"/>  


4,<util:list/>  
替代了之前通过<list><value></value></list>的内置配制方式,让多个bean调用同一list成为可能!  

老的用法  
Java代码   
  1. <bean id="emails" class="org.springframework.beans.factory.config.ListFactoryBean">  
  2.   <property name="sourceList">  
  3.       <list>  
  4.         <value>pechorin@hero.org</value>  
  5.         <value>raskolnikov@slums.org</value>  
  6.         <value>stavrogin@gov.org</value>  
  7.         <value>porfiry@gov.org</value>  
  8.       </list>  
  9.   </property>  
  10. </bean>  


新的用法  
Java代码   
  1. <util:list id="emails" list-class="java.util.LinkedList">  
  2.     <value>pechorin@hero.org</value>  
  3.     <value>raskolnikov@slums.org</value>  
  4.     <value>stavrogin@gov.org</value>  
  5.     <value>porfiry@gov.org</value>  
  6. </util:list>  


5,<util:map/>  
替代了之前适用<map><entry key=""><value></value></entry></map>的配置方式,让多个bean调用同一map成为可能!  

老的用法  
Java代码   
  1. <bean id="emails" class="org.springframework.beans.factory.config.MapFactoryBean">  
  2.   <property name="sourceMap">  
  3.       <map>  
  4.         <entry key="pechorin" value="pechorin@hero.org"/>  
  5.         <entry key="raskolnikov" value="raskolnikov@slums.org"/>  
  6.         <entry key="stavrogin" value="stavrogin@gov.org"/>  
  7.         <entry key="porfiry" value="porfiry@gov.org"/>  
  8.       </list>  
  9.   </property>  
  10. </bean>  


新的用法  
Java代码   
  1. <util:map id="emails" map-class="java.util.TreeMap">  
  2.     <entry key="pechorin" value="pechorin@hero.org"/>  
  3.     <entry key="raskolnikov" value="raskolnikov@slums.org"/>  
  4.     <entry key="stavrogin" value="stavrogin@gov.org"/>  
  5.     <entry key="porfiry" value="porfiry@gov.org"/>  
  6. </util:map>  



6,<util:set/>  
替代了之前适用<set><value></value></set>的配置方式,  
让多个bean调用同一set成为可能!  

老的用法  
Java代码   
  1. <bean id="emails" class="org.springframework.beans.factory.config.SetFactoryBean">  
  2.   <property name="sourceSet">  
  3.       <set>  
  4.         <value>pechorin@hero.org</value>  
  5.         <value>raskolnikov@slums.org</value>  
  6.         <value>stavrogin@gov.org</value>  
  7.         <value>porfiry@gov.org</value>  
  8.       </set>  
  9.   </property>  
  10. </bean>  



新的用法  
Java代码   
  1. <util:set id="emails" set-class="java.util.TreeSet">  
  2.     <value>pechorin@hero.org</value>  
  3.     <value>raskolnikov@slums.org</value>  
  4.     <value>stavrogin@gov.org</value>  
  5.     <value>porfiry@gov.org</value>  
  6. </util:set>  


7,<jee:jndi-lookup/>  
替代了之前使用JndiObjectFactoryBean指定配制获取容器JNDI资源的FactoryBean!  

老的用法  
Java代码   
  1. <bean id="simple" class="org.springframework.jndi.JndiObjectFactoryBean">  
  2.     <property name="jndiName" value="jdbc/MyDataSource"/>  
  3.     <property name="cache" value="true"/>  
  4.     <property name="resourceRef" value="true"/>  
  5.     <property name="lookupOnStartup" value="false"/>  
  6.     <property name="expectedType" value="com.myapp.DefaultFoo"/>  
  7.     <property name="proxyInterface" value="com.myapp.Foo"/>  
  8. </bean>  


新用法  
Java代码   
  1. <jee:jndi-lookup id="simple"  
  2.              jndi-name="jdbc/MyDataSource"  
  3.              cache="true"  
  4.              resource-ref="true"  
  5.              lookup-on-startup="false"  
  6.              expected-type="com.myapp.DefaultFoo"  
  7.              proxy-interface="com.myapp.Foo"/>  


8,<jee:local-slsb/>  
替代了之前使用LocalStatelessSessionProxyFactoryBean来获取无状态会话BEAN的FactoryBean!  

老的用法  
Java代码   
  1. <bean id="complexRemoteEjb"  
  2.       class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean">  
  3.   <property name="jndiName" value="ejb/MyRemoteBean"/>  
  4.   <property name="businessInterface" value="com.foo.service.RentalService"/>  
  5.   <property name="cacheHome" value="true"/>  
  6.   <property name="lookupHomeOnStartup" value="true"/>  
  7.   <property name="resourceRef" value="true"/>  
  8.   <property name="homeInterface" value="com.foo.service.RentalService"/>  
  9.   <property name="refreshHomeOnConnectFailure" value="true"/>  
  10. </bean>  


新的用法  
Java代码   
  1. <jee:remote-slsb id="complexRemoteEjb"  
  2.     jndi-name="ejb/MyRemoteBean"  
  3.     business-interface="com.foo.service.RentalService"  
  4.     cache-home="true"  
  5.     lookup-home-on-startup="true"  
  6.     resource-ref="true"  
  7.     home-interface="com.foo.service.RentalService"  
  8.     refresh-home-on-connect-failure="true">  

AOP,事务方面,添加的标签还是比较实用的! 

Java代码   
  1. <aop:config>  
  2.         <aop:advisor pointcut="execution(* *..PetStoreFacade.*(..))" advice-ref="txAdvice"/>  
  3.     </aop:config>  



Java代码   
  1. <tx:advice id="txAdvice">  
  2.         <tx:attributes>  
  3.             <tx:method name="insert*"/>  
  4.             <tx:method name="update*"/>  
  5.             <tx:method name="*" read-only="true"/>  
  6.         </tx:attributes>  
  7.     </tx:advice>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值