`
longgangbai
  • 浏览: 7326063 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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>  
分享到:
评论

相关推荐

    Spring XML配置十二个最佳实践

    在Spring XML配置文件中,可以使用简化的语法来为Bean的构造器参数和属性赋值。例如,以下两种写法是等价的: **原始写法:** ```xml &lt;bean id="orderService" class="com.lizjason.spring.OrderService"&gt; ...

    spring入门学习-3、Bean装配(XML).pdf

    在Spring中,Bean配置项是定义Bean的重要组成部分,通过XML配置文件来指定这些选项。 1. **Id**:这是为Bean分配的一个唯一标识符,它在配置文件内是唯一的。开发人员可以通过这个ID来获取或引用该Bean。 2. **...

    获得spring里注册Bean的四种方法

    这种方法需要在 Spring 配置文件中添加一个 Bean,例如 `&lt;bean id="serviceLocator" class="com.am.oa.commons.service.ServiceLocator" singleton="true" /&gt;`。然后,我们可以实现 BeanFactoryAware 接口,使用 ...

    Spring管理的Bean的生命周期

    当Spring容器加载了配置文件(如XML或Java配置)后,它会根据配置信息实例化Bean。Bean的创建有两种方式:默认构造器创建和工厂方法创建。默认构造器创建是通过无参数构造函数实例化Bean,而工厂方法则是通过指定的...

    Spring的bean生命周期

    1. **实例化**:当Spring容器(如ApplicationContext)启动时,它会读取配置文件(XML或Java配置),根据配置创建Bean的实例。实例化可以通过无参构造函数或者指定的构造函数完成。 2. **属性注入**:实例化后的...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    在Spring框架中,管理Bean的生命周期是至关重要的。Bean的生命周期包括初始化、正常运行以及销毁三个阶段。在这些阶段,Spring允许开发者定义自定义的行为,以便在特定时刻执行必要的操作。下面将详细介绍如何通过...

    ActiveMQ+spring配置方案详解

    在Spring的配置文件(如`applicationContext.xml`)中,我们可以通过`&lt;bean&gt;`标签创建一个连接工厂(ConnectionFactory),并指定ActiveMQ服务器的URL: ```xml &lt;bean id="jmsConnectionFactory" class="org.apache...

    spring3.0 + Quartz1.52 + applicationContext.xml

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Quartz则是一个强大的作业调度库,用于在应用程序中执行定时任务。这个压缩包“spring3.0 + Quartz1.52 + applicationContext.xml”显然是一个关于如何在...

    Spring part 2 :Bean的生命周期

    在Spring容器中,Bean的生命周期还包括容器感知的初始化和销毁,例如ApplicationContextAware接口允许Bean获取到容器引用,而ApplicationEventPublisherAware接口使Bean能够发布和监听应用事件。 总的来说,Spring ...

    Restful风格服务端应用的Spring Boot + Spring Security配置

    首先,我们需要理解Spring Boot的核心特性,它简化了Spring应用程序的初始化和配置过程。通过自动配置和起步依赖,Spring Boot允许我们快速地搭建一个可运行的应用。对于RESTful服务,我们通常会使用Spring MVC或...

    Spring+Struts+Hibernate比较详细的整合配置方案

    - 在Struts的`struts-config.xml`中,配置Action和ActionForward,使Struts知道如何调用Spring管理的Bean。 - 测试:运行应用,通过Struts的Action链路,检查Spring是否正确注入依赖,Hibernate是否能正常与数据库...

    解析Java中如何获取Spring中配置的bean

    在Spring中,bean代表的是应用程序中的对象,它们由Spring容器负责创建、初始化、配置和管理。配置bean通常通过XML或Java配置类进行,每个bean都有一个唯一的ID或名称,用于在程序中引用它们。 现在我们来看如何在...

    struts2 hibernate spring注解的整合(重写了巴巴运动网部门功能)

    - 集成Hibernate,配置`hibernate.cfg.xml`,使用SessionFactory,并在Spring中配置DataSource、SessionFactory Bean。 - 使用Spring的JdbcTemplate或HibernateTemplate进行数据访问操作,实现DAO层。 - 在...

    Spring -Quartz的配置

    在Spring的配置文件(如`applicationContext.xml`)中,我们需要声明Quartz的相关bean。这包括SchedulerFactoryBean、JobDetail和Trigger。例如: ```xml &lt;bean id="schedulerFactoryBean" class="org.spring...

    Spring实战之获得Bean本身的id操作示例

    从测试结果中,我们可以看到,Spring容器已经成功地将Bean的配置id传递给了setBeanName()方法,并将其保存在了beanName实例变量中。 在Spring框架中,获取Bean本身的id操作可以通过实现BeanNameAware接口来实现。...

    Spring配置Freemarker视图解析器,配置多个视图解析器

    在Spring的配置文件(如`applicationContext.xml`或`dispatcher-servlet.xml`)中,我们需要添加以下XML配置: ```xml &lt;bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker....

    spring boot中配置mybatis热加载相关文件

    创建一个配置类,继承`org.springframework.boot/autoconfigure/mybatis/MybatisAutoConfiguration`,然后重写`mapperLocations`方法,引入上面配置文件中的路径,以实现XML文件的热加载。例如: ```java @...

    Spring配置三种数据源及从属性文件中读取DB连接四要素

    但在实际项目中,通常我们会使用XML或Java配置来创建一个Bean,如下所示: ```xml &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; &lt;/bean&gt; ``` 二、多数据...

    基于java的企业级应用开发:Bean的生命周期.ppt

    - Spring容器根据配置(XML、Java配置或者注解)通过构造函数或工厂方法创建Bean的实例。实例化过程是Bean生命周期的起点。 2. **依赖注入**: - 在Bean实例化后,Spring会执行依赖注入(Dependency Injection,...

    spring security3配置

    为了使Spring Security能够在Web环境中正常工作,需要在`web.xml`中配置一个名为`springSecurityFilterChain`的过滤器,该过滤器是Spring Security的核心组件之一,用于处理所有的HTTP请求。 ```xml ...

Global site tag (gtag.js) - Google Analytics