利用spring的BeanNameAutoProxyCreator做事务管理配置
在项目开发时候,很多目标bean需要生成事务代理,可以为每一个目标bean配置一个 TransactionProxyFactoryBean 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> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/myuser</value> </property> <property name="username"> <value>lighter</value> </property> <property name="password"> <value>12345</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>org/mmc/dao/domain/User.hbm.xml</value> </list> </property> </bean> <!-- 配置Hibernate的事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 定义事务拦截器bean --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 定义BeanNameAutoProxyCreator--> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <!-- 所有名字以DAO,Service结尾的bean,将由该"bean后处理器"为其创建事务代理;实际上应该在业务层进行事务管理,这里只是举一个简单例子 --> <value>*DAO,*Service</value> </property> <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <property name="interceptorNames"> <list> <!-- 可以增加其他的拦截器 --> <value>transactionInterceptor</value> </list> </property> </bean> <!-- 举下面这一个例子:这时候,这一个bean已经有了事务管理,可以增加类似的bean --> <bean id="searchUserDAO" class="org.mmc.dao.impl.SearchUserDAO"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans> |