Spring AOP - XinxinZhou/JavaEE GitHub Wiki

Aspect Orient Programming, 面向切面编程,与OOP护卫补充,面向对象将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。 OOP从静态角度考虑程序结构,AOP从动态角度考虑程序运行过程。

常用于处理一些具有横切性质额度系统升级服务,如事务管理,安全监察,缓存,对象池管理等.

AspectJ 是 java语言的一个AOP实现,是用来学习SpringAOP的基础.(忽略)

AOP从程序运行角度考虑程序的流程,提取业务处理过程的切面,AOP面向程序运行中各个步骤,希望以更好的方式来组合业务处理的各个步骤. AOP框架不与特定的代码耦合,AOP框架能处理程序执行中特定切入点,而不与某个具体类耦合。

AOP 代理? AOP代理包含目标对象的全部方法,但是AOP代理中的方法与目标对象的方法存在差异: AOP方法在特定切入点添加了增强处理,并毁掉了目标对象的方法。 (增强处理:在原来的方法上,增加新的处理 (修改函数功能之类的))


Spring支持的事务策略 Java EE应用的传统事务有两种策略: 全局事务和局部事务. 全局事务由服务器管理,需要底层服务器JTA支持.

局部事务和底层所采用的持久化技术有关. JDBC持久化技术: 需要使用Connection对象来操作事务. Hibernate持久化技术: 使用Session对象来操作事务.

全局事务,可以跨多个事务性的资源(典例:关系数据库和消息队列); 局部事务,应用服务器不需要参与事务管理,因此不能保证跨多个事务性资源的事务的正确性。

? ? ? - - 当采用传统的事务编程策略时,代码必然与具体的事务操作代码耦合。 则当应用需要在不同的事务策略间切换时,开发者必须手动修改程序代码。 当1使用Spring事务操作策略后,就可以改变这种现状。

Spring事务策略是通过PlatformTransactionManager接口体现的,该接口是Spring事务策略的核心.该接口的源代码如下:

  • public interface PlatformTransactionManager{
  •   `//平台无关的事务方法`
    
  •   `TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;`
    
  •   `void commit(TransactionStatus status) throws TransactionException;`
    
  •   `void rollback(TransactionStatus status) throws TransactionException;`
    
  • }

PlatformTransactionManager 是一个与任何事务策略分离的接口,随着底层不同事务策略的切换,应用必须采取不同的实现类。 而PlatformTransactionManager 没有与任何事务资源捆绑在一起,它可以适应任何事务策略,结合Spring的IOC容器,可以向PlatformTransactionManager注入相关的平台特性。

应用程序面向与平台无关的接口编程,当底层采用不同的持久层技术时,系统只需使用不同的PlatformTransactionManager实现类即可---这种切换通常由Spring容器负责管理,应用程序既无须与具体的事务API耦合,也无须与特定实现类耦合,从而将应用和持久化技术、事务API彻底分开来.

Spring事务管理机制是一种典型的策略模式. 接口只定义方法,具体实现则交给其实现类来完成,它不知道底层如何管理事务---不同实现类则代表不同的事务管理策略。

应用底层(应用服务器: WebLogic, JBoss等) 支持怎样的事务策略,那么Spring就可以支持怎样的事务策略。Spring事务管理的优势是将应用从具体的事务API中分离出来,而不是真正提供事务管理的底层实现。