Spring的AOP简单介绍和常用配置(3)-事务配置

1.前言:

AOP传统方式的xml配置虽然配置比较繁琐,但对于理解spring背后机制还是有非常大的帮助的。

传统方式的配置也有2种方式:一、自定义代理;二、自动代理(这个是基于传统的配置方式,并非aop标签),然后我们在进行事务配置的时候,就是通过传统自动代理的方式的。暂时没有发现用aop标签配置事务的。

2.项目实例代码:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

	<!-- dbcp数据库连接池配置 -->
	<bean id="dataSourceDBCP" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"></property>
		<property name="username" value="root"></property>
		<property name="password" value="yuanwang"></property>
		<property name="maxIdle" value="10" />
		<property name="maxActive" value="100" />
		<property name="maxWait" value="10000" />
		<property name="validationQuery" value="select 1" />
		<property name="testOnBorrow" value="false" />
		<property name="testWhileIdle" value="true" />
		<property name="timeBetweenEvictionRunsMillis" value="1200000" />
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<property name="numTestsPerEvictionRun" value="5" />
		<property name="defaultAutoCommit" value="true" />
	</bean>

	<!-- 声明事务 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSourceDBCP"></property>
	</bean>

	<!-- 使用拦截器的方式来进行事务控制,个人觉得这个方法挺好,可以结合aop一起使用 -->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>

	<!-- 自动代理,对beanname为DaoImpl后缀的都绑定事务拦截器 -->
	<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<list>
				<value>*ServiceImpl</value>
			</list>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>

</beans>


PS:基于aop标签能实现的功能,传统方式都可以进行替代。

其实罗列一下这些配置的主要功能:

1.adivce指定(插入代码-异常,事务或是之前之后)

2.pointcut切入点(指定类的某些方法)

3.传统使用:

Advice实现:
1.AfterReturningAdvice:后接口
2.MethodBeforeAdvice:前接口
3.MethodInterceptor 前后接口
4.ThrowsAdvice 异常接口
配置代理类:
自定义代理类:ProxyFactoryBean
自动代理类:BeanNameAutoProxyCreator,DefaultAdvisorAutoProxyCreator
用于指定代码切入点具体位置(符合命名的方法或则表达式)
NameMatchMethodPointcutAdvisor,RegExpMethodPointcutAdvisor

4.基于aop标签配置

Adivce实现:
自定义类
1.非异常:自定义方法,参数JoinPoint可选
2.异常:JoinPoint jp,Throwable ta参数列表
配置代理类:
无,都是基于配置标签



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值