在项目中采用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">
取代了之前通过FieldRetrevingFactoryBean获取bean静态常量的FactoryBean!
老的用法
- <bean id="..." class="...">
- <property name="isolation">
- <bean id="java.sql.Connection.TRANSACTION_SERIALIZABLE"
- class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
- </property>
- </bean>
新用法
- <bean id="..." class="...">
- <property name="isolation">
- <util:constant static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE"/>
- </property>
- </bean>
2,<util:property-path/>
取代了之前通过PropertyPathFactoryBean来指定属性路径获取属性值的FactoryBean!
老的用法
- <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false">
- <property name="age" value="10"/>
- <property name="spouse">
- <bean class="org.springframework.beans.TestBean">
- <property name="age" value="11"/>
- </bean>
- </property>
- </bean>
- <bean id="testBean.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
新的用法
- <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false">
- <property name="age" value="10"/>
- <property name="spouse">
- <bean class="org.springframework.beans.TestBean">
- <property name="age" value="11"/>
- </bean>
- </property>
- </bean>
- <util:property-path id="name" path="testBean.age"/>
3,<util:properties/>
替代了之前通过PropertiesFactoryBean来获取properties配制文件数据的FactoryBean!
老用法
- <bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
- <property name="location" value="classpath:com/foo/jdbc-production.properties"/>
- </bean>
新用法
- <util:properties id="jdbcConfiguration" location="classpath:com/foo/jdbc-production.properties"/>
4,<util:list/>
替代了之前通过<list><value></value></list>的内置配制方式,让多个bean调用同一list成为可能!
老的用法
- <bean id="emails" class="org.springframework.beans.factory.config.ListFactoryBean">
- <property name="sourceList">
- <list>
- <value>pechorin@hero.org</value>
- <value>raskolnikov@slums.org</value>
- <value>stavrogin@gov.org</value>
- <value>porfiry@gov.org</value>
- </list>
- </property>
- </bean>
新的用法
- <util:list id="emails" list-class="java.util.LinkedList">
- <value>pechorin@hero.org</value>
- <value>raskolnikov@slums.org</value>
- <value>stavrogin@gov.org</value>
- <value>porfiry@gov.org</value>
- </util:list>
5,<util:map/>
替代了之前适用<map><entry key=""><value></value></entry></map>的配置方式,让多个bean调用同一map成为可能!
老的用法
- <bean id="emails" class="org.springframework.beans.factory.config.MapFactoryBean">
- <property name="sourceMap">
- <map>
- <entry key="pechorin" value="pechorin@hero.org"/>
- <entry key="raskolnikov" value="raskolnikov@slums.org"/>
- <entry key="stavrogin" value="stavrogin@gov.org"/>
- <entry key="porfiry" value="porfiry@gov.org"/>
- </list>
- </property>
- </bean>
新的用法
- <util:map id="emails" map-class="java.util.TreeMap">
- <entry key="pechorin" value="pechorin@hero.org"/>
- <entry key="raskolnikov" value="raskolnikov@slums.org"/>
- <entry key="stavrogin" value="stavrogin@gov.org"/>
- <entry key="porfiry" value="porfiry@gov.org"/>
- </util:map>
6,<util:set/>
替代了之前适用<set><value></value></set>的配置方式,
让多个bean调用同一set成为可能!
老的用法
- <bean id="emails" class="org.springframework.beans.factory.config.SetFactoryBean">
- <property name="sourceSet">
- <set>
- <value>pechorin@hero.org</value>
- <value>raskolnikov@slums.org</value>
- <value>stavrogin@gov.org</value>
- <value>porfiry@gov.org</value>
- </set>
- </property>
- </bean>
新的用法
- <util:set id="emails" set-class="java.util.TreeSet">
- <value>pechorin@hero.org</value>
- <value>raskolnikov@slums.org</value>
- <value>stavrogin@gov.org</value>
- <value>porfiry@gov.org</value>
- </util:set>
7,<jee:jndi-lookup/>
替代了之前使用JndiObjectFactoryBean指定配制获取容器JNDI资源的FactoryBean!
老的用法
- <bean id="simple" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="jdbc/MyDataSource"/>
- <property name="cache" value="true"/>
- <property name="resourceRef" value="true"/>
- <property name="lookupOnStartup" value="false"/>
- <property name="expectedType" value="com.myapp.DefaultFoo"/>
- <property name="proxyInterface" value="com.myapp.Foo"/>
- </bean>
新用法
- <jee:jndi-lookup id="simple"
- jndi-name="jdbc/MyDataSource"
- cache="true"
- resource-ref="true"
- lookup-on-startup="false"
- expected-type="com.myapp.DefaultFoo"
- proxy-interface="com.myapp.Foo"/>
8,<jee:local-slsb/>
替代了之前使用LocalStatelessSessionProxyFactoryBean来获取无状态会话BEAN的FactoryBean!
老的用法
- <bean id="complexRemoteEjb"
- class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean">
- <property name="jndiName" value="ejb/MyRemoteBean"/>
- <property name="businessInterface" value="com.foo.service.RentalService"/>
- <property name="cacheHome" value="true"/>
- <property name="lookupHomeOnStartup" value="true"/>
- <property name="resourceRef" value="true"/>
- <property name="homeInterface" value="com.foo.service.RentalService"/>
- <property name="refreshHomeOnConnectFailure" value="true"/>
- </bean>
新的用法
- <jee:remote-slsb id="complexRemoteEjb"
- jndi-name="ejb/MyRemoteBean"
- business-interface="com.foo.service.RentalService"
- cache-home="true"
- lookup-home-on-startup="true"
- resource-ref="true"
- home-interface="com.foo.service.RentalService"
- refresh-home-on-connect-failure="true">
AOP,事务方面,添加的标签还是比较实用的!
- <aop:config>
- <aop:advisor pointcut="execution(* *..PetStoreFacade.*(..))" advice-ref="txAdvice"/>
- </aop:config>
- <tx:advice id="txAdvice">
- <tx:attributes>
- <tx:method name="insert*"/>
- <tx:method name="update*"/>
- <tx:method name="*" read-only="true"/>
- </tx:attributes>
- </tx:advice>
相关推荐
在Spring XML配置文件中,可以使用简化的语法来为Bean的构造器参数和属性赋值。例如,以下两种写法是等价的: **原始写法:** ```xml <bean id="orderService" class="com.lizjason.spring.OrderService"> ...
在Spring中,Bean配置项是定义Bean的重要组成部分,通过XML配置文件来指定这些选项。 1. **Id**:这是为Bean分配的一个唯一标识符,它在配置文件内是唯一的。开发人员可以通过这个ID来获取或引用该Bean。 2. **...
这种方法需要在 Spring 配置文件中添加一个 Bean,例如 `<bean id="serviceLocator" class="com.am.oa.commons.service.ServiceLocator" singleton="true" />`。然后,我们可以实现 BeanFactoryAware 接口,使用 ...
当Spring容器加载了配置文件(如XML或Java配置)后,它会根据配置信息实例化Bean。Bean的创建有两种方式:默认构造器创建和工厂方法创建。默认构造器创建是通过无参数构造函数实例化Bean,而工厂方法则是通过指定的...
1. **实例化**:当Spring容器(如ApplicationContext)启动时,它会读取配置文件(XML或Java配置),根据配置创建Bean的实例。实例化可以通过无参构造函数或者指定的构造函数完成。 2. **属性注入**:实例化后的...
在Spring框架中,管理Bean的生命周期是至关重要的。Bean的生命周期包括初始化、正常运行以及销毁三个阶段。在这些阶段,Spring允许开发者定义自定义的行为,以便在特定时刻执行必要的操作。下面将详细介绍如何通过...
在Spring的配置文件(如`applicationContext.xml`)中,我们可以通过`<bean>`标签创建一个连接工厂(ConnectionFactory),并指定ActiveMQ服务器的URL: ```xml <bean id="jmsConnectionFactory" class="org.apache...
在IT行业中,Spring框架是Java企业级应用开发的首选,而Quartz则是一个强大的作业调度库,用于在应用程序中执行定时任务。这个压缩包“spring3.0 + Quartz1.52 + applicationContext.xml”显然是一个关于如何在...
在Spring容器中,Bean的生命周期还包括容器感知的初始化和销毁,例如ApplicationContextAware接口允许Bean获取到容器引用,而ApplicationEventPublisherAware接口使Bean能够发布和监听应用事件。 总的来说,Spring ...
首先,我们需要理解Spring Boot的核心特性,它简化了Spring应用程序的初始化和配置过程。通过自动配置和起步依赖,Spring Boot允许我们快速地搭建一个可运行的应用。对于RESTful服务,我们通常会使用Spring MVC或...
- 在Struts的`struts-config.xml`中,配置Action和ActionForward,使Struts知道如何调用Spring管理的Bean。 - 测试:运行应用,通过Struts的Action链路,检查Spring是否正确注入依赖,Hibernate是否能正常与数据库...
在Spring中,bean代表的是应用程序中的对象,它们由Spring容器负责创建、初始化、配置和管理。配置bean通常通过XML或Java配置类进行,每个bean都有一个唯一的ID或名称,用于在程序中引用它们。 现在我们来看如何在...
- 集成Hibernate,配置`hibernate.cfg.xml`,使用SessionFactory,并在Spring中配置DataSource、SessionFactory Bean。 - 使用Spring的JdbcTemplate或HibernateTemplate进行数据访问操作,实现DAO层。 - 在...
在Spring的配置文件(如`applicationContext.xml`)中,我们需要声明Quartz的相关bean。这包括SchedulerFactoryBean、JobDetail和Trigger。例如: ```xml <bean id="schedulerFactoryBean" class="org.spring...
从测试结果中,我们可以看到,Spring容器已经成功地将Bean的配置id传递给了setBeanName()方法,并将其保存在了beanName实例变量中。 在Spring框架中,获取Bean本身的id操作可以通过实现BeanNameAware接口来实现。...
在Spring的配置文件(如`applicationContext.xml`或`dispatcher-servlet.xml`)中,我们需要添加以下XML配置: ```xml <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker....
创建一个配置类,继承`org.springframework.boot/autoconfigure/mybatis/MybatisAutoConfiguration`,然后重写`mapperLocations`方法,引入上面配置文件中的路径,以实现XML文件的热加载。例如: ```java @...
但在实际项目中,通常我们会使用XML或Java配置来创建一个Bean,如下所示: ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> </bean> ``` 二、多数据...
- Spring容器根据配置(XML、Java配置或者注解)通过构造函数或工厂方法创建Bean的实例。实例化过程是Bean生命周期的起点。 2. **依赖注入**: - 在Bean实例化后,Spring会执行依赖注入(Dependency Injection,...
为了使Spring Security能够在Web环境中正常工作,需要在`web.xml`中配置一个名为`springSecurityFilterChain`的过滤器,该过滤器是Spring Security的核心组件之一,用于处理所有的HTTP请求。 ```xml ...