【Core Spring】三、AOP

AOP的一些基本概念

  增强(Advice):增强定义了切片做什么和何时做。Spring切片有以下5种增强

    1. Before--增强功能发生在被增强函数调用之前
    2. After--增强功能发生在被增强函数完成后,不管怎样完成(正常推出、抛出异常)
    3. After-returning--增强功能发生在被增强函数成功完成后
    4. After-throwing--增强功能发生在被增强函数抛出异常后
    5. Around--增强包装被增强方法,在被增强函数调用前后提供一些功能

  连接点(Join points):你的应用程序可能有成千上万次机会被增强。这些机会就是连接点。一个连接点是在程序执行过程中切面可以被插入的点。这个点可能是一个方法被调用、一个异常被抛出、甚至一个域(成员变量)被修改。你的切片的代码可以在这些点被插入到应用程序的正常流程中以增加新的行为。

  切入点(Pointcuts):如果增强定义了切片做什么和何时做,那么切入点定义了在了哪里做。一个切入点的定义包括了一个或多个增强可以被织入的连接点。你可以通过显式的类和方法名或者常规的匹配类和方法名模型的表达式来指定连接点。

  切面(Aspects):一个切面是增强和切入点的集合。

  引入(Introductions):引入允许你为某个已有的类增加新的方法或者属性。

  织入(Weaving):织入是一个将切片应用的一个目标对象以创建一个新的代理对象的过程。切片会在特定的连接点被织入到目标对象中。织入可以发生在以下几个目标对象生命周期的节点上。

      • 编译期--切片在目标对象被编译后织入。这需要一个特殊编译器。AspectJ的织入编译器这样织入切片。
      • 类加载期--切片在目标对象被加载进JVM后织入。这需要一个特殊的ClassLoader(在类被引入应用之前增强目标对象的比特码)。AspectJ 5的加载时织入(LTW)支持这种织入方式。
      • 运行时--切片在应用运行的某个时间被织入。通常,AOP容器动态地生成一个代理对象委托目标对象织入切片。这正是Spring AOP的实现方式。

Spring的AOP支持

  并非所有的AOP框架都是一样的,它们可能通过连接点模型的丰富程度不同进行区分,也可能通过织入切片方式不同区分。无论怎样,创建切入点以定义切片织入的连接点的能力是AOP框架的关键。

  Spring对AOP的支持有以下4种方式:

      • Classic Spring proxy-based AOP
      • Pure-POJO aspects
      • @AspectJ annotation-driven aspects
      • Injected AspectJ aspects (available in all versions of Spring)

  前3种方式是Spring自己的实现。Spring通过动态代理实现AOP。因此,Spring AOP受限于方法拦截。

  第一种方式太过成就,已经很少应用,这里不再赘述。

  通过aop命名空间,你可以将pure POJOs变为切片。事实上,这些POJOs仅提供响应切入点调用的方法。不幸地是,这种技术需要XML配置,但是这是一种简单的声明式地将任何对象变为切片的方式。

时间: 2024-10-12 09:24:08

【Core Spring】三、AOP的相关文章

Spring(三)——AOP

AOP全名为Aspect-Oriented Programming,意思是面向横切面编程,前边我们有过介绍   面向横切面编程AOP的理解 ,我们通过这种编程思想很容易的扩展我们的应用程序. 一,如何实现AOP编程思想呢?实现这种编程思想的一个重要手段就是代理模式或者说模仿代理模式的运用.尤其是其中动态代理模式,JDK提供的Proxy的使用,这个在前边也总结:Proxy代理模式的应用                       而这种动态代理是基于接口的,也就是说代理对象和目标对象实现了同一个接

Spring(三)AOP面向切面编程

原文链接:http://www.orlion.ga/205/ 一.AOP简介 1.AOP概念 参考文章:http://www.orlion.ml/57 2.AOP的产生 对于如下方法:     public class UserDAOImpl implements UserDAO{           public void saveUser(User user){      doSaveUser();      }     } 想在saveUser方法中执行保存用户之前和之后记录当前时间以求出

Spring框架 AOP(三)

AOP理论概述 Aspect Oriented Programming 面向切面编程 业界 AOP 实际上 OOP (面向对象编程 ) 延伸 -- OOP编程语言. AOP设计思想 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) 横向抽取代码复用,基于代理技术,在不修改原有对象代码情况下,对原有对象方法功能进行增强! ---- AOP 思想 Spring框架如何实现AOP Spring1.2 版本开始 开始支持AOP技术 (传统Spring AOP

基于spring的aop实现多数据源动态切换

https://lanjingling.github.io/2016/02/15/spring-aop-dynamicdatasource/ 基于spring的aop实现多数据源动态切换 发表于 2016-02-15   |   分类于 spring  | 一.多数据源动态切换原理 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此:又例如:读写分离数据库配置的系统. 1.多数据源设置: 1)静态数据源切换:一般情况下,我们可以配置多个数据源,然后为每个数据源写一套对应的

Spring的AOP与代理

spring 支持两种注入方式: setter/constructor 支持多种配置方式: xml/java5注解/java类配置 支持两种事务管理: 声明性/编程性 实际上上述方式只有一个就能保证系统构建与运行了,就是说它们都是可以互换的.当然每个方式的优缺点不同. 6.2  Spring的AOPAOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充.问世的时间并不太长,甚至在国内的翻译还不太统一(有些书翻译成面向方面编程),但它确实极好地

Spring 之 AOP

面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化.AOP 的核心构造是方面, 它将那些影响多个类的行为封装到可重用的模块中. 通常情况下,对于AOP,我们有两种方式来实现. 使用DynamicProxy实现AOP 下面是一个简单的示例,首先定义业务对象: 1 public interface UserDao { 2 3 void save(); 4 } 5 6 public class UserDaoImpl imp

Spring框架第五篇之Spring与AOP

一.AOP概述 AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运行过程. AOP底层就是采用动态代理模式实现的,采用了两种代理:JDK的动态代理与CGLIB的动态代理. 面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP容器的功能将切面织入到主业务逻辑中.所谓交叉业务逻辑是指,通用的.与主业务逻辑无关的代码.如安全检查.事务.日志等. 若不是用AOP,则会出

Spring的AOP详解

Spring的AOP详解 一.AOP基础 1.1AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平台,面对这样的支付系统该如何解决呢? 传统解决方案 1.日志部分定义公共类LogUtils,定义logPayBegin方法用于记录支付开始日志, logPayEnd用于记录支付结果 logPayBegin(long userId,long money) logPay

spring的AOP

最近公司项目中需要添加一个日志记录功能,就是可以清楚的看到谁在什么时间做了什么事情,因为项目已经运行很长时间,这个最初没有开来进来,所以就用spring的面向切面编程来实现这个功能.在做的时候对spring的AOP还比较陌生,事后通过网上学习对其有了较好的了解. AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象