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

来源:互联网 发布:申请淘宝信用借贷 编辑:程序博客网 时间:2024/06/06 04:00

1.前言:

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

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

2.项目实例代码:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  5.   
  6.     <!-- dbcp数据库连接池配置 -->  
  7.     <bean id="dataSourceDBCP" class="org.apache.commons.dbcp.BasicDataSource"  
  8.         destroy-method="close">  
  9.         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
  10.         <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"></property>  
  11.         <property name="username" value="root"></property>  
  12.         <property name="password" value="yuanwang"></property>  
  13.         <property name="maxIdle" value="10" />  
  14.         <property name="maxActive" value="100" />  
  15.         <property name="maxWait" value="10000" />  
  16.         <property name="validationQuery" value="select 1" />  
  17.         <property name="testOnBorrow" value="false" />  
  18.         <property name="testWhileIdle" value="true" />  
  19.         <property name="timeBetweenEvictionRunsMillis" value="1200000" />  
  20.         <property name="minEvictableIdleTimeMillis" value="1800000" />  
  21.         <property name="numTestsPerEvictionRun" value="5" />  
  22.         <property name="defaultAutoCommit" value="true" />  
  23.     </bean>  
  24.   
  25.     <!-- 声明事务 -->  
  26.     <bean id="transactionManager"  
  27.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  28.         <property name="dataSource" ref="dataSourceDBCP"></property>  
  29.     </bean>  
  30.   
  31.     <!-- 使用拦截器的方式来进行事务控制,个人觉得这个方法挺好,可以结合aop一起使用 -->  
  32.     <bean id="transactionInterceptor"  
  33.         class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  34.         <property name="transactionManager" ref="transactionManager" />  
  35.         <property name="transactionAttributes">  
  36.             <props>  
  37.                 <prop key="save*">PROPAGATION_REQUIRED</prop>  
  38.                 <prop key="add*">PROPAGATION_REQUIRED</prop>  
  39.                 <prop key="update*">PROPAGATION_REQUIRED</prop>  
  40.                 <prop key="delete*">PROPAGATION_REQUIRED</prop>  
  41.                 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
  42.                 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
  43.                 <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>  
  44.             </props>  
  45.         </property>  
  46.     </bean>  
  47.   
  48.     <!-- 自动代理,对beanname为DaoImpl后缀的都绑定事务拦截器 -->  
  49.     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  50.         <property name="beanNames">  
  51.             <list>  
  52.                 <value>*ServiceImpl</value>  
  53.             </list>  
  54.         </property>  
  55.         <property name="interceptorNames">  
  56.             <list>  
  57.                 <value>transactionInterceptor</value>  
  58.             </list>  
  59.         </property>  
  60.     </bean>  
  61.   
  62. </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 0
原创粉丝点击