浅析Spring AOP(一)——基本概念

什么是AOP?

与OOP对比,AOP是处理一些横切行问题。这些横切性问题不会影响到主逻辑的实现,但是会散落到代码的各个部分,难以维护。AOP就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。

传统OOP是自上而下的逻辑开发;

OOP:

AOP是一种面向切面的编程思想。这些横切性问题,把它们抽象为一个切面,关注点在切面的编程,这就是所谓的AOP。

AOP关注点是横切性问题:

Spring AOP 简介

如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用。

AOP应用场景:

日志记录,权限验证,效率检查,事务管理......

学习Spring最好的方式是从spring官方文档入手.

AOP中的一些基本概念:

必须先知道这些基础概念,要不后面看得一脸懵逼。

官网:AOP

官网一开始给出的概念

个人认为理解顺序应该为:

Join point:连接点,例如:servlet中的longin()就是连接点;所以连接点在spring中它永远是一个方法。也可以说‘目标对象中的方法就是一个连接点‘。

pointcut:切点,就是连接点的集合!

Weaving:织入;

这个过程叫做织入(Weaving):

Advice:通知,就字面意思,但是有2个部分组成,通知内容和通知到哪里去。

通知类型:

Before :前置通知,在连接点方法前调用

After :后置通知,在连接点方法后调用

AfterReturning:返回通知,在连接点方法执行并正常返回后调用,要求连接点方法在执行过程中没有发生异常

AfterThrowing:异常通知,当连接点方法异常时调用

Around:环绕通知,它将覆盖原有方法,但是允许你通过反射调用原有方法,后面会讲

Aspect:切面!包括连接点,切点,通知的一个载体。(如果用AspectJ它就是一个类,如果用springXML的时候它就是一个标签)并且交给spring管理。

Target object:目标对象,原始对象。

AOP proxy:代理对象, 包含了原始对象的代码和增强后的代码的那个对象。

Introduction:引入,个人理解为实现接口;

代码验证为:

@DeclareParents(value="com.vince.dao.*", defaultImpl=IndexDao.class)

public static Dao dao;

com.vince.dao.*下的所有类默认实现了IndexDao.class

概念理解

切点匹配表达式

切点匹配表达式:

execution:可以定义到方法的的最小粒度是参数的返回类型,修饰符,包名,类名,方法名,Spring AOP主要也是使用这个匹配表达式。

within:只能定义到类

this:当前生成的代理对象的类型匹配

target:目标对象类型匹配

args:只针对参数

execution和within的区别:

他们的主要区别就是粒度,within主要是辅助,为了健全而存在的。

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)   throws-pattern?)

方法的可见性(不写代表所有)?方法的返回类型  方法所在类的全路径名 ?方法名类型(方法的参数类型) 方法抛出的异常类型?

如果看的一脸懵逼....就借助代码理解一下。

举个栗子:

本篇只用到注解的方式:

首先引入包:

引入包:

代码:

切面1-1:

切面1-2:

dao:

扫描:

测试类:

只开启了beforeWithin()和beforeExecution()这两个通知

测试结果:

结果可以看出beforeExecution匹配了2个切入点,而beforeWithin匹配了全部的切入点。如需测试代码可以私信。

AOP的内容非常多,本文主要介绍了SpringAOP的一些基础概念。

参考资料:

感觉写得超级好:Spring(4)——面向切面编程(AOP模块)

官网:AOP



本人才疏学浅,以上纯属个人理解,如有不对,还望批评指正。

原文地址:https://www.cnblogs.com/vince-zww/p/11498726.html

时间: 2024-11-07 09:12:39

浅析Spring AOP(一)——基本概念的相关文章

深入理解Spring AOP之基本概念

深入理解Spring AOP之基本概念 AOP到底是什么 Spring AOP和IOC是听到的关于Spring最频繁的两个词了.现在来重点关注AOP这个词,IOC先放一边,下面这段话摘自Spring优势中关于面向切面的介绍: 面向切面--Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发.应用对象只实现它们应该做的--完成业务逻辑--仅此而已.它们并不负责(甚至是意识)其它的系统级关

我所理解的Spring AOP的基本概念

Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了非常多样例后,写一些自己理解的一些spring的概念.要理解面向切面编程,要首先理解代理模式和动态代理模式. 如果一个OA系统中的一个功能是查看考勤信息,那么我们如果有要实现这个功能,要经历的步骤是: 1.启动日志,进行记录. 2.启动安全性的框架进行安全检验 3.验证权限 4.假设有权限,则查看考勤记录,假设无权限,则输出没有权限. 我们的目标方法是查看考勤记录,而前面运行了那么多与目标方法无关的方法. 那些与业务逻辑无关的方法

Spring AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)

1.我所知道的AOP 初看起来,上来就是一大堆的术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下让你不知所措,心想着:管不得很多人都和我说AOP多难多难.当我看进去以后,我才行发现:他就是一些Java基础上的朴实无华的应用,包括IOC(见<Spring IOC(依赖注入.控制反转)概念理解>),包括许许多多这样的名词,都是万变不离其宗而已. 2.为什么要用AOP 1)就是为了方便,看一个国外很有名的大师说,编程的人都是“懒人”,因为他把自己做的事情都让程序去做了.

Spring AOP(一)--基本概念

AOP(Aspect Oriented Programing),意为面向切面编程,其实看了很多书本的介绍和说明,我觉得这些解释都太过书面,也可能是翻译的原因,总觉得还是不太懂,也难以理解这种叫法,尤其是这个切面.其实切面在数学中指的是“和球面只有一个交点的平面”,我猜测spring团队之所以这么起名应该也是受了这种数学思想的启发,所以我也以这个为出发点去理解它.面向切面编程,假设我的某个业务逻辑是一个球,有一个切面和它相交于一点,所以它们互不干扰,只是通过这个切点连接,帮助我们完成一些功能,我觉

Spring学习十三----------Spring AOP的基本概念

? 版权声明:本文为博主原创文章,转载请注明出处 什么是AOP -面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 -主要的功能是:日志记录.性能统计.安全控制.事务处理.异常处理等 AOP实现方式 -预编译 -AspectJ -运行期动态代理(JDK动态代理.CGLib动态代理) -Spring AOP.Jboss AOP AOP相关概念 -切面(Aspect)   一个关注点的模块化,这个关注点可能会横切多个对象 -连接点(Joinpoint)   程序执行过程中

浅析Spring AOP(面向方面编程)

SpringAOP提供的优势 1.允许开发者声明企业级服务,比如:事务服务.安全性服务.EJB组件能够使用J2EE容器提供声明式服务.但是需要借助于EJB组件,而SpringAOP却不需要EJB容器,即借助于Spring的事务抽象框架能够在EJB容器外部使用企业级.声明式服务. 2.开发者可以开发满足业务需求的自定义方面.类似于JBOSS服务器中拦截器开发一样,如果标准的J2EE安全性不能满足业务需求,则必须开发拦截器. 3.开发SpringAOP advice很方便,这些AOP Advice不

做一个合格的程序猿之浅析Spring AOP源码(十五) 分析JdkDynamicAopProxy的invoke方法

上一节我们已经分析了Proxyfactorybean如何去生成一个目标对象的代理的,这一节我们将浅析一下基于JDK动态代理的核心回调方法invoke的源代码: 首先先打开JdkDynamicAopProxy.java 如下 JdkDynamicAopProxy.java文件是实现了AopProxy和InvocationHandler这2个接口的 先讲AopProxy这个接口,如图所示,AopProxy接口就定义了2个方法 我们再看这个接口的继承关系 好了,作为原生的基于JDK的动态代理的JdkD

做一个合格的程序猿之浅析Spring AOP源码(十八) Spring AOP开发大作战源码解析

其实上一篇文章价值很小,也有重复造轮子的嫌疑,网上AOP的实例很多,不胜枚举,其实我要说的并不是这个,我想要说的就是上一节中spring的配置文件: 我们这边并没有用到我们上几节分析的哪几个AOP的主要实现类:ProxyFactoryBean.java , ProxyFactory.java ,AspectJProxyFactory.java ,在我们这个配置文件中,根本没有显示的去配置这些类,那么spring到底是怎么做到的呢? 大家可以这么想,spring到底是怎么去杀害目标对象的呢?真正的

Spring AOP 的实现 原理

反射实现 AOP 动态代理模式实例说明(Spring AOP 的实现 原理) 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录, 我们写个例子看看我们最简单的解决方案 我们先写一个接口IHello.java代码如下: [java] view plaincopyprint? package sinosoft.dj.aop.staticaop; public interface IHello {