spring事务管理及自动代理的xml schema和注解 的配置方法

 

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
						http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
						http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
	<!-- 读取资源文件 -->
	<!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
		<property name="location" value="classpath:jdbc.properties" /> </bean> -->

	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<!-- <value>file:${configPath}/dataSource.properties</value> -->
				<value>classpath:dataSource.properties</value>
				<!-- <value>/WEB-INF/config/dataSource.properties</value> -->
			</list>
		</property>
	</bean>

	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>${driverClassName}</value>
		</property>
		<property name="password">
			<value>${password}</value>
		</property>
		<property name="username">
			<value>${username}</value>
		</property>
		<property name="url">
			<value>${url}</value>
		</property>
	</bean>

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-config.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- spring 事物管理针对anotation的问题 <tx:annotation-driven transaction-manager="transactionManager" 
		proxy-target-class="true" /> 只能针对Web层Service,DAO层不能包含在里面. 如果有多个package,使用","分隔即可. 
		2.在XML中需要声明service的名字与class <context:component-scan base-package="com.tanghsk.mock.admin.right.action"/> 
		<bean id="examRightService" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean> -->


	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.tanghsk.mock.admin" />

	</bean>
	<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" /> 
	<!-- 启用用户的缓存功能 -->
	<!-- 
	<bean id="userCache" class="org.springframework.security.core.userdetails.cache.EhCacheBasedUserCache"> 
		<property name="cache" ref="userEhCache" /> 
	</bean> 
	<bean id="userEhCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 
		<property name="cacheName" value="userCache" /> 
		<property name="cacheManager" ref="cacheManager" /> 
	</bean> 
	<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" /> 
	spring security自带的与权限有关的数据读写Jdbc模板 
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
		<property name="dataSource" ref="dataSource" /> 
	</bean> 
		在这个类中,你就可以从数据库中读入用户的密码,角色信息,是否锁定,账号是否过期等 
		用户详细信息管理:数据源、用户缓存(通过数据库管理用户、角色、权限、资源)。 
	<bean id="userDetailsManager" class="avatar.base.security.MyUserDetailsService"> 
		<property name="pubUsersHome" ref="pubUsersHome" /> 
		<property name="pubAuthoritiesResourcesHome" ref="pubAuthoritiesResourcesHome" /> 
		<property name="dataSource" ref="dataSource" /> 
		<property name="userCache" ref="userCache" /> 
	</bean> 
	-->

	<!-- <bean id="exceptionHandler" class="com.tanghsk.util.MyException"></bean> -->
	<!-- 事务配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<bean id="logs" class="com.tanghsk.mock.admin.interceptor.LogInterceptor"></bean>

	<!--事务拦截器  xml schema配置方法 注解的配置与此不同-->
	<!-- 以下为spring 事务设置 -->
	<!-- 拦截代理对象,为了给业务逻辑对象增加事务处理 -->
	<!-- 
		transactionAttributes属性可以设置事务处理的方式,事务隔离级别,是否只读三个属性,用逗号隔开 事务隔离级别各数据库系统不完全支持,
		一般不设置,用默认的即可 。
		事务处理选项有如下几个:
		(前面2个常用)
		PROPAGATION_REQUIRED - 需要事务处理。如果当前不存在事务环境,则创建一个 PROPAGATION_SUPPORTS 
		- 如果当前存在事务环境,则作为其中的一部分。如果不存在,则按非事务方式执行 PROPAGATION_REQUIRES_NEW - 需要事务处理。
		并总是开启一个新事务。如果已经存在事务环境,则挂起之 
		PROPAGATION_MANDATORY - 执行到指定方法时,必须已经存在事务环境,否则出错 PROPAGATION_NEVER - 不支持事务操作,如果存在事务环境会出错 
		PROPAGATION_NOT_SUPPORTED - 不支持事务操作。如果存在事务,则挂起
	 -->

	<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
		<property name="transactionManager"> 
			<ref bean="transactionManager" /> 
		</property> 
		<property name="transactionAttributes"> 
			<props> 
				<!--  key表示匹配DAO中的方法名,例如:save*表示所有前缀为save的方法 -->
				<prop key="save*">PROPAGATION_REQUIRED</prop> 
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
				<prop key="del*">PROPAGATION_REQUIRED</prop> 
				<prop key="update*">PROPAGATION_REQUIRED</prop> 
			</props> 
		</property> 
	</bean> 
	<!--  自动代理 xml schema的配置方式--> 
	<!--  
		自动代理  非AspectJ切面,非注解的方式
		产生代理的是类,不能是接口 Spring代理有两种方式,一种时对接口的代理,另一种是用CGLIB代理方式,对接口的代理是JDK采用的代理方式, 
		但在没有接口的情况下Srping通过设置proxyTargetClass等于 true来使用CGLIB代理,CGLIB是一种面向继承的代理方式。 
		同时还有一个proxyTarget属性用来指定代理的目标对象类。
	-->
		
	<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
		 <property name="proxyTargetClass"> 
		 	<value>true</value> 
		 </property> 
		 <!-- 可以是Service或DAO层(最好是针对业务层*Service) --> 
		<property name="beanNames"> 
			<list> 
				<value>*Service</value> 
			</list> 
		</property> 
		<property name="interceptorNames"> 
			<list> 
				<value>logs</value>
				<value>transactionInterceptor</value>
			</list> 
		</property> 
	</bean>
	
	<!-- 基于@Transactional注解方式的事务管理 
		必要条件:1.须在×Service类里加上@Transactional注解
				 2.还需要在spring配置文件中加入下面这段
				 对标注了@Transactional注解的bean进行加工,织入事务管理切面 
				<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
				 加入了此配置,spring就会自动装载那些使用了service等注解的bean,并为其设置属性
				<context:component-scan base-package="com.maxjay.bank.service"/>
				 	
				// @Transactional可以使用在类和方法上,其默认的事务传播行为是REQUIRED,隔离级别为ISOLATION_DEFAULT,读写事务属性为读/写事务  
				// 该注解的属性有 propagation:事务传播行为;isolation:事务隔离级别,可以通过Isolation枚举类来设置;  
				// readOnly:事务读写性;timeout:超时时间,int型,单位秒;  
				// rollbackFor:定义需要进行回滚的异常类,如@Transactional(rollBackForClassName={SQLException.class,..});  
				// noRollBackFor:定义遇到时不回滚的类 
	-->
	<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>
	
	<!-- aspect 的声明   注解方式-->
	<!-- 
		自动代理AspectJ切面,两种方法
		1、在配置文件里声明AnnotationAwareAspectJAutoProxyCreator进行自动代理。 
		<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
  		2、也可以使用<aop:aspectj-autoproxy />标签自动代理。 
	 -->
	
	<aop:aspectj-autoproxy proxy-target-class="true" />
	<bean id="myAspect" class="com.tanghsk.mock.admin.aop.LogsAspect"></bean>
	
	
	<!-- spring context配置文件 -->
	<!-- 先排除*action$的扫描,因为程序里spring和springmvc的配置文件分开导入的,当spring-application加载时,spring-servlet还没完成加载,
	所以扫描*action$里springmvc注解时会发生错误 -->
	<context:component-scan base-package="com.tanghsk.mock.admin">
		<context:exclude-filter type="regex" expression=".*action$" />
	</context:component-scan>
	
	<bean id="rightServiceCreat" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean>
	<!-- <bean id="RoleService" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean> -->
</beans>
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值