spring学习笔记——面向切面编程AOP一

1、基本术语:

横切关注点:分布于应用中多处的功能被称为横切关注点,比如日志、安全、事务管理

切面:横切关注点可以被模块化为特殊的类,这些类被称为切面

通知:spring切面可以应用5种类型的通知

    a.Before——在方法被调用之前调用通知

    b.After——在方法完成之后调用通知,无论方法执行是否成功

    c.After-returning——在方法成功执行之后调用通知

    d.After-throwing——在方法抛出异常后调用通知

    f.Around——通知包裹了被通知的方法,在被通知的方法调用之前和之后执行自定义的行为

连接点:这个点可以是调用方法时、抛出异常时、甚至修改一个字段时

切点:如果通知定义了切面的“什么”和“何时”,那么切点就定义了“何处”

切面:切面是通知和切点的结合,通知和切点共同定义了关于切面的全部内容——它是什么,在何时和何处完成其功能

引入:引入允许我们向现在有的类添加新方法或属性

织入:织入是将切面应用到目标对象来创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期里有多个点可以进行织入

  a.编译器——切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面  的。

  b.类加载期——切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器,它可以在目标类被引入应用之前增强  该目标类的字节码。AspectJ5的LTW就支持以这种方式织入切面

  c.运行期——切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代  理对象。spring aop就是以这种方式织入切面的。

2、spring提供了4种各具特色的aop支持:

a.基于代理的经典aop;

[email protected]注解驱动的切面;

c.纯POJO切面

d.注入式AspectJ切面(适合spring各版本)

3、spring在运行期通知对象:通过在代理类中包裹切面,spring在运行期将切面织入到spring管理的bean中。

如图,代理类封装了目标类,并拦截被通知的方法的调用,再将调用转发给真正的目标Bean。

当拦截到方法调用时,在调用目标Bean,代理会执行切面逻辑。

直到应用需要被代理的Bean时,spring才创建代理对象。如果使用的是applicationcontext,在applicationcontext从BeanFactory中加载所有Bean时,spring创建被代理的对象(是代理对象还是被代理对象)。因为spring运行时才创建代理对象,所以我们不需要特殊的编译器来织入spring aop的切面

4、spring只支持方法连接点,因为spring基于动态代理

spring借助AspectJ的切点表达式语言来定义spring切面:

AspectJ指示器 描述
arg() 限制连接点匹配参数为指定类型的执行方法
@args() 限制连接点匹配参数由指定注解标注的执行方法
execution() 用于匹配是连接点的执行方法
this() 限制连接点匹配aop代理的Bean引用为指定类型的类
target() 限制连接点匹配目标对象为指定类型的类
@target() 限制连接点匹配特定的执行对象,这些对象对应的类要具备指定类型的注解
within() 限制连接点匹配指定的类型
@within() 限制连接点匹配指定注解所标注的类型(当使用spring aop时,方法定义在由指定的注解所标注的类里)
@annotation 限制匹配带有指定注解连接点

当使用其他指示器时,将会抛出IllegalArgumentException异常

时间: 2024-10-10 17:56:02

spring学习笔记——面向切面编程AOP一的相关文章

spring学习笔记——面向切面编程AOP二

上一篇介绍了一些概念,这篇我们开始进行编写代码. 1.编写切点: 如图所示的切点表达式表示当Instrument的play()方法执行时会触发通知.方法表达式以*号开始,标识了我们不关心方法返回值的类型.然后,我们指定了全限定类名和方法名.对于参数列表,我们使用(..)标识切点选择任意的play()方法,无论该方法的入参是什么.当我们需要配置切点仅匹配com.springinaction.springidol包,可以使用within()指示器来限制匹配. 除此之外,spring 2.5还引入一个

spring学习笔记——面向切面编程AOP三

前面介绍了aop的xml的简单配置和使用,下面介绍一下aop的注解使用方式的例子,可以对照第二篇的 pom文件是相同的: spring.xml文件: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XML

spring学习 八 面向切面编程(AOP)概述

注:本文大部分参考   --------------------- 本文来自 -望远- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yanquan345/article/details/19760027?utm_source=copy 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,Spring是一个库,一个Java库,所以我个人觉得应该这样

Spring(四):面向切面编程AOP

横切关注点:分布于应用中多处的功能 面向切面编程AOP:将横切关注点与业务逻辑相分离 在使用面向切面编程时,仍在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何处应用,而无需修改受影响的类. 横切关注点可以被模块化为特殊的类,这些类被称为切面. 好处: 每个关注点集中于一处,而不是分散到多处代码中 服务模块更加简洁,因为它们只包含主要关注点的代码,次要关注点被转移到切面中了 1.定义AOP术语 1.1.通知(Advice) 切面的工作被称为通知. 通知定义了切面是什么以及何

Spring(二)面向切面编程AOP

这篇博客写的比较累赘,好多相同的程序写了好几遍,主要是为了是自己养成这样的一个编程思路,其中应该不乏错误之处,以后好好学,慢慢改吧.------jgp 1 AOP介绍 1.1什么是AOP 面向切面编程(Aspect Oriented Programing):通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP采取横向抽取机制,取代了传统纵向继承体系的重复性代码,主要体现在事务处理.日志管理.权限控制.异常处理等方面,使开发人员在编写业务逻辑时可以专心于核心业务,提高了代码的可

spring中面向切面编程(AOP)的个人理解

面向切面编程AOP,是spring的一大特点 Aspect切面:封装共性功能的(增强功能的)类 Advice通过:切面类中封装的增强功能的方法. PointCut:切入点,是一个集合的概念,该集合的表达使用一个正则表达式表达 所有核心业务对象的所有方法的前后(事务处理AOP典型的应用) JoinPoint:连接点,程序中需要加入advice的地方,而且正在执行的ponitCut 织入(Weaving):将aspect和核心业务对象,进行整合的过程. 通过特定接口实现AOp Aop通知的类型: B

Web项目中静态代理和动态代理为基础的面向切面编程AOP

本来每天更新的,我一般喜欢夜里过了十二点的时候发文章,结果难道是愚人节吗?学校的网也很有意思,断了,把我给耍了...好吧-开始今天的话题AOP.AOP太重要了,所以放到第二篇文章来谈这个话题,AOP是Spring中的重要概念.如果这个不理解Web开发中的三大框架的原理,那就呵呵了.时常听到同学和网友议论Web程序员大部分时间都是在考皮XML配置,我当时听到也是醉了,所以我要用心学习Web,其实这里面蕴含的设计模式.算法.架构思想在源码中体现的淋漓尽致啊,一个大宝库竟然视而不见可惜了.下面就一起品

面向切面编程——Aop

一.概念 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论,它是对传统OOP编程的一种补充. 二.Aop原理 1.面向对象编程模型 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分.面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等

【串线篇】面向切面编程AOP

面向切面编程AOP 描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式 (其底层就是Java的动态代理)spring对其做了简化书写 场景: 1).AOP加日志保存到数据库 2).AOP做权限验证,filter能做的它都能 3).AOP做安全检查 4).AOP做事务控制 AOP专业术语: 原文地址:https://www.cnblogs.com/yanl55555/p/11744089.html