spring与hibernate集成:全部bean共享一个代理基类(applicationContext.xml文件)
spring与hibernate集成:所有bean共享一个代理基类(applicationContext.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--在spring中加入外部*.properties文件-->
<bean id="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<!--配置c3p0连接池,利用hibernate提供的c3p0-->
<bean id="myDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" dependency-check="none">
<property name="driverClass">
<value>${datasource.driverClassName}</value>
</property>
<property name="jdbcUrl">
<value>${datasource.url}</value>
</property>
<property name="user">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property>
<property name="acquireIncrement">
<value>${c3p0.acquireIncrement}</value>
</property>
<property name="initialPoolSize">
<value>${c3p0.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${c3p0.maxPoolSize}</value>
</property>
<property name="maxIdleTime">
<value>${c3p0.maxIdleTime}</value>
</property>
<property name="idleConnectionTestPeriod">
<value>${c3p0.idleConnectionTestPeriod}</value>
</property>
<property name="maxStatements">
<value>${c3p0.maxStatements}</value>
</property>
<property name="numHelperThreads">
<value>${c3p0.numHelperThreads}</value>
</property>
</bean>
<!--配置sessionFactory,一个sessionFactory对应一个数据库-->
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
singleton="true">
<!--关联数据库,将datasource注入到sessionfactory中-->
<property name="dataSource">
<ref local="myDataSource" />
</property>
<!--关联hibernate映射文件-->
<property name="mappingDirectoryLocations">
<list>
<value>
<!--目录com/lisco/pub/domain/hibernate下的所有hibernate映射文件-->
classpath*:/com/lisco/pub/domain/hibernate
</value>
<value>
classpath*:/com/lisco/ypgl/domain/hibernate
</value>
</list>
</property>
<!--配置hibernate.cfg.xml中的属性,这样就可以不用hibernate.cfg.xml文件了-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<!--配置是否加载配置文件时自动生成表结构-->
<prop key="hibernate.hbm2ddl.auto">
update
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.jdbc.fetch_size">
${hibernate.jdbc.fetch_size}
</prop>
<prop key="hibernate.jdbc.batch_size">
${hibernate.jdbc.batch_size}
</prop>
<prop key="hibernate.connection.release_mode">
${hibernate.connection.release_mode}
</prop>
<prop key='hibernate.query.factory_class'>
${hibernate.query.factory_class}
</prop>
</props>
</property>
</bean>
<!--配置事务管理器-->
<bean id="myTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--将sessionfactory注入到事务管理器中-->
<!--只要是通过sessionFactory创建的session都纳入到事务管理器的管理范围,
在services中this.getHibernateTemplate()创建的HibernateTemplate就由此事务管理器管理-->
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>
<!--配置事务代理,所有Bean共享一个代理基类-->
<bean id="myTransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--注入事务管理器-->
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
<!--配置事务的传播特性-->
<property name="transactionAttributes">
<props>
<!--所有以create、update、delete、save开头的方法采用PROPAGATION_REQUIRED的事务策略-->
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<!--其他的方法采用PROPAGATION_REQUIRED而且readOnly的事务策略-->
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!--注册service类-->
<bean id="aqgl_PunishRecService"
class="com.lisco.aqgl.service.impl.DefaultPunishRecService">
<!--配置sessionFactory属性,因为系统中所有的service类都继承于spring的HibernateDaoSupport,sessionFactory属性是HibernateDaoSupport类的属性-->
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>
<bean id="aqgl_RectificationRecService"
class="com.lisco.aqgl.service.impl.DefaultRectificationRecService">
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>
<!-- 注册service类的代理,parent属性指明代理类的父类为上面配置的事务代理 -->
<bean id="aqgl_PunishRecService_proxy"
parent="myTransactionProxyFactoryBean">
<!--配置此代理的目标对象-->
<property name="target">
<ref local="aqgl_PunishRecService" />
</property>
</bean>
<bean id="aqgl_RectificationRecService_proxy"
parent="myTransactionProxyFactoryBean">
<property name="target">
<ref local="aqgl_RectificationRecService" />
</property>
</bean>
<!--为beanNames属性标注的beans配置拦截器,拦截器由interceptorNames属性定义,value值为-->
<bean name="loggingAutoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!--配置被拦截的类或者方法-->
<property name="beanNames">
<list>
<value>/ypgl/ExamineAction</value>
<value>/ypgl/RegisteAction</value>
<value>/ypgl/WRegisteAction</value>
<value>/ypgl/WExamineAction</value>
<value>/ypgl/SearchAction</value>
<value>/excelprint/ExcelPrintAction</value>
</list>
</property>
<!--配置拦截器-->
<property name="interceptorNames">
<list>
<value>xtgl_PrivValidate_Adveice</value>
</list>
</property>
</bean>
<!--定义拦截器-->
<bean id="xtgl_PrivValidate_Adveice"
class="com.lisco.xtgl.aspects.PrivValidateAdvice">
</bean>
<!--拦截器的具体实现
public class PrivValidateAdvice implements MethodBeforeAdvice {
/**
* 设置IoC 容器之中的代理的ID标识
*/
public final static String BEAN_PORXY_ID = "xtgl_PrivValidate_Adveice";
public void before(Method method, Object[] args, Object target)
throws Throwable {
HttpServletRequest request = (HttpServletRequest) args[2];
HttpServletResponse response = (HttpServletResponse) args[3];
//判断当前会话是否过期,每个service方法之前都要执行次方法
if(request.getSession() == null || request.getSession().getAttribute("loginUserView") == null) {
if(request.getSession().getAttribute("branch") == null) {
response.sendRedirect("/lisco/common/error/overtime.htm");
}
}
}
}
-->
<!--导入spring其他的配置文件-->
<import resource="com/lisco/xtgl/config/applicationContext-xtgl.xml" />
<import resource="com/lisco/ypgl/config/applicationContext-ypgl.xml" />
<import resource="com/lisco/pub/config/applicationContext-pub.xml" />
<import resource="com/lisco/xmsz/config/applicationContext-xmsz.xml" />
<import resource="com/lisco/excelprint/config/applicationContext-excelprint.xml" />
<import resource="com/lisco/aqgl/config/applicationContext-aqgl.xml" />
<import resource="com/lisco/bzypgl/config/applicationContext-bzypgl.xml" />
<import resource="com/lisco/clsb/config/applicationContext-clsb.xml" />
<import resource="com/lisco/kcgl/config/applicationContext-kcgl.xml" />
<import resource="com/lisco/lygl/config/applicationContext-lygl.xml" />
<import resource="com/lisco/rcjl/config/applicationContext-rcjl.xml" />
<import esource="com/lisco/rygl/config/applicationContext-rygl.xml" />
<import resource="com/lisco/sbgl/config/applicationContext-sbgl.xml" />
<import resource="com/lisco/sysrkgl/config/applicationContext-sysrkgl.xml" />
<import resource="com/lisco/dictionary/config/applicationContext_dictionary.xml" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--在spring中加入外部*.properties文件-->
<bean id="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<!--配置c3p0连接池,利用hibernate提供的c3p0-->
<bean id="myDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" dependency-check="none">
<property name="driverClass">
<value>${datasource.driverClassName}</value>
</property>
<property name="jdbcUrl">
<value>${datasource.url}</value>
</property>
<property name="user">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property>
<property name="acquireIncrement">
<value>${c3p0.acquireIncrement}</value>
</property>
<property name="initialPoolSize">
<value>${c3p0.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${c3p0.maxPoolSize}</value>
</property>
<property name="maxIdleTime">
<value>${c3p0.maxIdleTime}</value>
</property>
<property name="idleConnectionTestPeriod">
<value>${c3p0.idleConnectionTestPeriod}</value>
</property>
<property name="maxStatements">
<value>${c3p0.maxStatements}</value>
</property>
<property name="numHelperThreads">
<value>${c3p0.numHelperThreads}</value>
</property>
</bean>
<!--配置sessionFactory,一个sessionFactory对应一个数据库-->
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
singleton="true">
<!--关联数据库,将datasource注入到sessionfactory中-->
<property name="dataSource">
<ref local="myDataSource" />
</property>
<!--关联hibernate映射文件-->
<property name="mappingDirectoryLocations">
<list>
<value>
<!--目录com/lisco/pub/domain/hibernate下的所有hibernate映射文件-->
classpath*:/com/lisco/pub/domain/hibernate
</value>
<value>
classpath*:/com/lisco/ypgl/domain/hibernate
</value>
</list>
</property>
<!--配置hibernate.cfg.xml中的属性,这样就可以不用hibernate.cfg.xml文件了-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<!--配置是否加载配置文件时自动生成表结构-->
<prop key="hibernate.hbm2ddl.auto">
update
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.jdbc.fetch_size">
${hibernate.jdbc.fetch_size}
</prop>
<prop key="hibernate.jdbc.batch_size">
${hibernate.jdbc.batch_size}
</prop>
<prop key="hibernate.connection.release_mode">
${hibernate.connection.release_mode}
</prop>
<prop key='hibernate.query.factory_class'>
${hibernate.query.factory_class}
</prop>
</props>
</property>
</bean>
<!--配置事务管理器-->
<bean id="myTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--将sessionfactory注入到事务管理器中-->
<!--只要是通过sessionFactory创建的session都纳入到事务管理器的管理范围,
在services中this.getHibernateTemplate()创建的HibernateTemplate就由此事务管理器管理-->
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>
<!--配置事务代理,所有Bean共享一个代理基类-->
<bean id="myTransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--注入事务管理器-->
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
<!--配置事务的传播特性-->
<property name="transactionAttributes">
<props>
<!--所有以create、update、delete、save开头的方法采用PROPAGATION_REQUIRED的事务策略-->
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<!--其他的方法采用PROPAGATION_REQUIRED而且readOnly的事务策略-->
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!--注册service类-->
<bean id="aqgl_PunishRecService"
class="com.lisco.aqgl.service.impl.DefaultPunishRecService">
<!--配置sessionFactory属性,因为系统中所有的service类都继承于spring的HibernateDaoSupport,sessionFactory属性是HibernateDaoSupport类的属性-->
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>
<bean id="aqgl_RectificationRecService"
class="com.lisco.aqgl.service.impl.DefaultRectificationRecService">
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>
<!-- 注册service类的代理,parent属性指明代理类的父类为上面配置的事务代理 -->
<bean id="aqgl_PunishRecService_proxy"
parent="myTransactionProxyFactoryBean">
<!--配置此代理的目标对象-->
<property name="target">
<ref local="aqgl_PunishRecService" />
</property>
</bean>
<bean id="aqgl_RectificationRecService_proxy"
parent="myTransactionProxyFactoryBean">
<property name="target">
<ref local="aqgl_RectificationRecService" />
</property>
</bean>
<!--为beanNames属性标注的beans配置拦截器,拦截器由interceptorNames属性定义,value值为-->
<bean name="loggingAutoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!--配置被拦截的类或者方法-->
<property name="beanNames">
<list>
<value>/ypgl/ExamineAction</value>
<value>/ypgl/RegisteAction</value>
<value>/ypgl/WRegisteAction</value>
<value>/ypgl/WExamineAction</value>
<value>/ypgl/SearchAction</value>
<value>/excelprint/ExcelPrintAction</value>
</list>
</property>
<!--配置拦截器-->
<property name="interceptorNames">
<list>
<value>xtgl_PrivValidate_Adveice</value>
</list>
</property>
</bean>
<!--定义拦截器-->
<bean id="xtgl_PrivValidate_Adveice"
class="com.lisco.xtgl.aspects.PrivValidateAdvice">
</bean>
<!--拦截器的具体实现
public class PrivValidateAdvice implements MethodBeforeAdvice {
/**
* 设置IoC 容器之中的代理的ID标识
*/
public final static String BEAN_PORXY_ID = "xtgl_PrivValidate_Adveice";
public void before(Method method, Object[] args, Object target)
throws Throwable {
HttpServletRequest request = (HttpServletRequest) args[2];
HttpServletResponse response = (HttpServletResponse) args[3];
//判断当前会话是否过期,每个service方法之前都要执行次方法
if(request.getSession() == null || request.getSession().getAttribute("loginUserView") == null) {
if(request.getSession().getAttribute("branch") == null) {
response.sendRedirect("/lisco/common/error/overtime.htm");
}
}
}
}
-->
<!--导入spring其他的配置文件-->
<import resource="com/lisco/xtgl/config/applicationContext-xtgl.xml" />
<import resource="com/lisco/ypgl/config/applicationContext-ypgl.xml" />
<import resource="com/lisco/pub/config/applicationContext-pub.xml" />
<import resource="com/lisco/xmsz/config/applicationContext-xmsz.xml" />
<import resource="com/lisco/excelprint/config/applicationContext-excelprint.xml" />
<import resource="com/lisco/aqgl/config/applicationContext-aqgl.xml" />
<import resource="com/lisco/bzypgl/config/applicationContext-bzypgl.xml" />
<import resource="com/lisco/clsb/config/applicationContext-clsb.xml" />
<import resource="com/lisco/kcgl/config/applicationContext-kcgl.xml" />
<import resource="com/lisco/lygl/config/applicationContext-lygl.xml" />
<import resource="com/lisco/rcjl/config/applicationContext-rcjl.xml" />
<import esource="com/lisco/rygl/config/applicationContext-rygl.xml" />
<import resource="com/lisco/sbgl/config/applicationContext-sbgl.xml" />
<import resource="com/lisco/sysrkgl/config/applicationContext-sysrkgl.xml" />
<import resource="com/lisco/dictionary/config/applicationContext_dictionary.xml" />
</beans>