`
sinokaka
  • 浏览: 320312 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

项目总结--事务管理自动代理

阅读更多

         项目使用了Spring的声明式事务管理,其是通过SpringAop实现的,主要是对于所有开发人员都是透明的,不用开发人员进行管理。同时使用了Spring的自动代理功能进行实现。

主要由一下几部分声明组成,需要注意的是,Spring对于关键的一些类不关心名称,只关心类型,它根据类型进行装配。

A)声明自动代理类

xml 代码
  1. <bean id="proxyCreator"  
  2.     class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />  

 

2)事务拦截增强,定义一些事务管理的规则

xml 代码
  1. <bean id="txInterceptor"  
  2.     class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  3.         <property name="transactionManager" ref="transactionManager" />  
  4.         <property name="transactionAttributes">  
  5.             <props>  
  6.                 <prop key="save*">  
  7. PROPAGATION_REQUIRED,-Exception   
  8. </prop>  
  9.                 <prop key="delete*">  
  10.                     PROPAGATION_REQUIRED,-Exception   
  11.                 </prop>  
  12.                 <prop key="get*">  
  13.                     PROPAGATION_REQUIRED,readOnly,-Exception   
  14.                 </prop>  
  15.                 <prop key="detail*">  
  16.                     PROPAGATION_REQUIRED,readOnly,-Exception   
  17.                 </prop>  
  18.                 <prop key="*">  
  19. PROPAGATION_REQUIRED,readOnly   
  20. </prop>  
  21.             </props>  
  22.         </property>  
  23.     </bean>  

 

3)定义pointcutadvice的装配器,即告知Spring,某个增强与某个切入点关联,在这里实现了一个切入点(pointcut) com.ufida.cvms.util.proxy.AutoLogicPointCut.

xml 代码
  1. <bean id="advisor"  
  2.     class="org.springframework.aop.support.DefaultPointcutAdvisor">  
  3.         <property name="pointcut">  
  4. <bean class="com.ABC.bcd.util.proxy.AutoLogicPointCut" />  
  5.         </property>  
  6.         <property name="advice">  
  7.             <ref bean="txInterceptor" />  
  8.         </property>  
  9. </bean>  

 

切入点代码如下,主要实现Pointcut接口即可以。GetClassFilter方法中判断符合切入点类的规则。GetMethodMatcher返回符合切入点类中方法的规则。在这里,只增强了DefaultLogic类,及其子类。方法是类中的所有方法。因为Logic是业务得重要操作地方,所以事务管理到Logic就可以了。

java 代码
  1. public class AutoLogicPointCut implements Pointcut {   
  2.   
  3.     /* (non-Javadoc)  
  4.      * @see org.springframework.aop.Pointcut#getClassFilter()  
  5.      */  
  6.     public ClassFilter getClassFilter() {   
  7.         return new RootClassFilter(DefaultLogic.class);   
  8.     }   
  9.   
  10.     /* (non-Javadoc)  
  11.      * @see org.springframework.aop.Pointcut#getMethodMatcher()  
  12.      */  
  13.     public MethodMatcher getMethodMatcher() {   
  14.         return MethodMatcher.TRUE;   
  15.     }   
  16.   
  17. }   

 

分享到:
评论

相关推荐

    python入门到高级全栈工程师培训 第3期 附课件代码

    10 学员管理示例:学员管理 第55章 01 Django的ORM基本操作补充之概要 02 Django的ORM基本操作补充之一对多 03 学员管理示例:编辑学生 04 Django的ORM基本操作补充之多对多 05 学员管理示例:为班级分配老师 06 ...

    spring chm文档

    7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSources 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator 7.9.1.3. AbstractAdvisorAutoProxyCreator 7.9.2. 使用元数据驱动...

    Spring 2.0 开发参考手册

    7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSources 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ...

    Spring中文帮助文档

    7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSource 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ...

    Spring API

    7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSource 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ...

    asp.net知识库

    CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的...

    Spring.3.x企业应用开发实战(完整版).part2

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring3.x企业应用开发实战(完整版) part1

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    java 面试题 总结

    EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 21、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖...

    IIS6.0 IIS,互联网信息服务

    点击下一步: 4、系统安装成功,系统会自动在系统盘新建网站目录,默认目录为:C:\Inetpub\wwwroot 5、打开控制面板-性能和维护-管理工具-Internet 信息服务: 6、在默认网站上点击右键-选择属性: 7、点击主...

    开涛高可用高并发-亿级流量核心技术

    5.2 自动开关降级 95 5.2.1 超时降级 95 5.2.2 统计失败次数降级 95 5.2.3 故障降级 95 5.2.4 限流降级 95 5.3 人工开关降级 96 5.4 读服务降级 96 5.5 写服务降级 97 5.6 多级降级 98 5.7 配置中心 100 5.7.1 应用...

    在线考试系统文献综述

    现阶段虽只实现了试卷的客观题部分,但已具有用户注册、多用户同时在线考试、时间控制、自动判卷,试题录入、修改题库、用户管理、科目管理、管理员管理等重要功能,也就是说实现了真正的无纸化考试,满足任何授权的...

    二十三种设计模式【PDF版】

    正因为这点不同,导致建筑的管理模式和软件的管理模式就有很多不同, 有些人认识不到这点,就产生了可以大量使用"软件 蓝领"的想法,因为他羡慕建筑中"民工"的低成本. 要知道软件还有一个与建筑截然相反的责任和用途,那...

Global site tag (gtag.js) - Google Analytics