`

Spring 2.0 与Spring 1.0 AOP 与事务配置区别

阅读更多
************Spring 1.0的标准事务配置*************** 先定义一个baseTxService进行基本的事务定义,类型为TransactionProxyFactoryBean。如果service没有基于接口,使用cgilib来实现AOP,定义<property name="proxyTargetClass" value="true"></property> 实际的Manager类设置parent=baseTxService,target 为匿名的实际Manager类。如果需要定义特殊的事务,利用merge=true的属性,在manager的transactionAttributes节点进行新事务的定义。 <bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"><property name="transactionManager" ref="transactionManager"></property><property name="proxyTargetClass" value="true"></property><property name="transactionAttributes"><props><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="remove*">PROPAGATION_REQUIRED</prop></props></property><property name="preInterceptors"><list><ref bean="methodSecurityInterceptor"></ref></list></property></bean><bean id="bookManager" parent="baseTxService"><property name="target"><bean class="org.springside.bookstore.admin.manager.BookManager"></bean></property></bean> **************Spring 2.0的新配置:********* 如果如果service没有基于接口,使用cgilib来实现AOP,定义proxy-target-class="true" <config proxy-target-class="true"><advisor pointcut="execution(* com.xyz.service..*Manager.*(..))" advice-ref="txAdvice"></advisor><advisor pointcut="execution(* com.xyz.service..*Manager.save(..))" advice-ref="fooAdvice"></advisor></config><advice id="txAdvice" transaction-manager="transactionManager"><attributes><method name="get*" read-only="true"></method><method name="find*" read-only="true"></method><method name="*"></method></attributes></advice><bean id="bookManager" class="org.springside.bookstore.commons.service.BookManager"></bean> 其中com.xyz是你的项目package限定前缀。 2.进步 1. AOP的配置方式也AOP了。 对比1.0的配置文件,因为下面2提到的限制,事关安全acegi methodSecurityInterceptor 拦截器要配置在关于事务的TransactionProxyFactoryBean的preInterceptors属性里,这样子就一点不AOP了。 而2.0使用ponintcut expression,很AOP的配置一切Aspect。 2. 1.0时,一个已经AOP过的object不能再次被AOP。 在Spring 1.0的文档里Rod说,比如<bean id="bookManager" parent="baseTxService">已经进行了一次AOP,如果想在这个Bean上再配一层AOP,比如要对方法执行结果缓存,无论以1.0 还是2.0的方式定义,cglib方式是会报错的,而基于接口的方式,结果不确定。 3. BookManager能直接定义自己,而不是像1.0那样作匿名内部target。 虽然在1.0时代的BeanNameAutoProxyCreator 达到类似作用,但只能用BeanName来模糊匹配比较危险,没有AspectJ的pointcut语法细致。 3. 语法 满江红翻译的 Spring参考文档 6.3 schema-based AOP support 提供了aspect,advisor,advide三种组装方法的解释,其中aspect是aspectJ原装,但稍复杂。 唯一有点难懂的是pointcut里的语法,其实也很好学,Spring参考文档6.2.3.4 示例里有完整说明 ,其实一排子过去是 execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)其中带问号的modifiers-pattern?(public/protected) 和 declaring-type-pattern? throws-pattern? 可以不填 execution(* *..BookManager.save(..))的解读: 第一颗* 代表ret-type-pattern 返回值可任意, *..BookManager 代表任意Pacakge里的BookManager类。 如果写成com.xyz.service.* 则代表com.xyz.service下的任意类 com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类 save代表save方法,也可以写save* 代表saveBook()等方法 (..) 匹配0个参数或者多个参数的,任意类型 (x,..) 第一个参数的类型必须是X (x,,,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。 注意事项: 1. name-pattern千万不要写成*..*Manager ,这样子会把所有第三方类库的Manager比如Spring的PlatformTranstationManager 也加入aop,非常危险。所以最好还是加上项目的package前缀,如"org.springside..*Manager" 2. 因为有*,会修饰所有方法,有些hibernateTemplate的final的方法不能被cglib修改,会抛warning,无害。 4. 事务定义选项 事务定义一般默认的PROPAGATION_REQUIRED即可,另提供的几个选择很少使用。值得注意的是一个PROPAGATION_NESTED,嵌入式事务的意义在于多级事务,如果出错只rollback子事务自己,不rollback主事务的所有操作。比如OrderManager的shipOrder函数 调用 save函数,如果save()被定义为嵌入式事务,当进入save()时,会存储save point。如果在save 中出错,会rollback 到刚才的save point,但不影响其他的操作。这需要JDBC3.0 SavePoint功能的支持。 而一般service间互相嵌入调用时,如果都定义为PROPAGATION_REQUIRED,有其中一个操作出错,rollback全部操作</bean>
分享到:
评论

相关推荐

    spring2.0技术手册--林信良

    《Spring 2.0 技术手册》是继 Spring 1.0 之后的重要著作,作者林信良针对 Spring 框架在 2.0 版本中的新特性进行了深入剖析与讲解。本书不仅适合于已经有一定 Java 开发基础的学习者,也适用于想要深入了解 Spring ...

    spring2.0声明式事务

    ### Spring 2.0 声明式事务配置详解 #### 一、Spring 2.0 声明式事务概述 随着 Spring 框架的发展,从 Spring 1.x 到 Spring 2.0 版本,声明式事务管理方式有了显著改进。在 Spring 1.x 中,主要通过 AOP 方式实现...

    Spring2.0(一)第一个Spring程序、IoC的应用

    8. **AOP增强**:Spring 2.0的AOP功能允许开发者定义切面,用于封装横切关注点,如日志、事务管理等。通过声明式AOP,开发者可以在不修改业务代码的情况下,实现这些关注点的插入。 9. **数据访问支持**:Spring ...

    Struts2.1.6+Spring2.0+Hibernate3.1

    根据给定文件的信息,本文将详细介绍如何配置Struts2.1.6、Spring2.0与Hibernate3.1这三个框架的整合开发环境。这是一套经典的MVC(Model-View-Controller)架构组合,适用于构建复杂的Java Web应用程序。 ### 一、...

    Spring2.0精简笔记

    ### Spring2.0精简笔记知识点解析 #### 一、Spring基础知识 1. **Spring简介:** - **Spring框架**是一种轻量级Java开发框架,主要用来简化企业级应用的开发过程。它通过一系列的设计模式(如依赖注入DI、面向切...

    spring2.0语法着色文档

    综上所述,Spring2.0文档提供了关于IoC容器的深入理解,包括BeanFactory和ApplicationContext的不同特点,以及如何配置和使用这些容器来管理对象的生命周期。通过对这些知识点的学习,开发者可以更好地理解和利用...

    利用SPring AOP配置切面的一个例子

    ### Spring AOP 配置切面实例解析 #### 一、引言 本文将通过一个具体的例子来介绍如何在Spring框架中使用面向切面编程(Aspect Oriented Programming, AOP)。我们将关注如何定义一个切面(Aspect),以及如何在...

    spring3.0.5与JPA2.0(hibernate3.6)的集成详细说明

    本篇将详细讲解如何将Spring 3.0.5与JPA 2.0(基于Hibernate 3.6)进行集成,以构建高效、灵活的应用程序。 首先,让我们了解Spring 3.0.5的核心特性。Spring 3.0引入了若干改进和新特性,包括对JSR-303(Bean ...

    Spring 2.x配置详解

    自 Spring 2.0 起,推荐使用基于 XML Schema 的配置方式,这种方式比传统的 DTD 基础配置更为灵活。一个典型的 Spring 2.5 配置文件至少会包含以下结构: ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; ...

    spring2.5+strut2.0+hibernate3.3集成

    4. **整合Spring和Hibernate**:通过Spring管理Hibernate SessionFactory,并在Service层注入Session,实现事务管理。 5. **整合Spring和Struts**:使用Spring的Struts2插件,将Spring的bean注入到Action类中,实现...

    spring配置全书.doc

    Spring配置全书中,作者Craig Walls深入探讨了Spring的各种配置技术,包括bean的定义、依赖注入的实现方式、AOP(面向切面编程)、事务管理、数据访问集成(如JDBC、ORM框架)以及Spring MVC等。此外,他还提到了...

    01.Spring框架简介_spring_spring发展历程_

    2004年,Spring 1.0版本正式发布,引入了核心的IoC容器和AOP特性。随后的2006年,Spring 2.0带来了重大改进,支持JSR-250注解、Java 5的枚举类型以及更多模块化设计。2009年,Spring 3.0发布,全面支持Java EE 6,...

    Spring教程 spring tutorial

    - **2004年**:Spring框架1.0正式发布。 - **2005年**:Spring框架2.0发布,增加了对Java 5的支持。 - **2015年3月**:Spring框架4.1.6发布,这是本教程所基于的版本。 - **后续版本**:Spring框架持续发展,引入了...

    livebookstore-with-hsqldb-1.0.zip

    "livebookstore-with-hsqldb-1.0.zip" 是一个包含此类系统的压缩包,它利用了Spring 2.0框架、UML建模语言以及SSH(Struts、Spring、Hibernate)技术栈,同时还集成了轻量级数据库HSQldb。这个项目为我们提供了深入...

    spring基本配置

    通过对上述Spring配置文件的分析,我们可以了解到Spring框架是如何通过XML配置来管理Bean、实现依赖注入、配置事务管理等功能的。掌握这些基础知识对于使用Spring框架进行开发非常重要。 此外,还需要注意的是,...

    java框架配置[汇编].pdf

    选择Spring的版本(例如Spring2.0),并勾选所需的配置项。完成后点击"Finish"。 之后,配置Hibernate。在MyEclipse中,同样右键点击工程,选择Hibernate的相关选项。在此过程中,需要指定数据库的版本、数据库名称...

    Spring的基础知识.pptx

    2021年发布了Spring 1.0测试版,后续不断更新,如2021年的Spring 2.0,2021年的Spring 2.5,直至2021年的Spring 3.1。Spring 3.1.3是截至描述时的最新版本。Spring的发展旨在提供更高效、灵活和易于部署的解决方案,...

    目录树(Ext.2.0)

    在IT行业中,构建高效、可维护的企业级应用是至关重要的,而"目录树(Ext.2.0)"的标题和描述暗示了这是一个基于Struts1.0、Spring2.0、Hibernate3.0和Ext.2.0技术栈的项目。这四个组件都是Java开发中的关键工具,它们...

    Spring Boot 实战教程,由浅入深详细介绍springboot的使用

    - **面向切面编程(Aspect-Oriented Programming, AOP)**:通过 AOP,可以在不修改业务逻辑的情况下添加横切关注点(如日志记录、事务管理等)。 - **模块化设计**:Spring 框架由多个模块组成,包括核心容器、数据...

Global site tag (gtag.js) - Google Analytics