Aop又叫面向切面编程,它的作用就是管理分散在整个应用中的变动。这句话理解起来有点抽象,举个例子,比如我想在多个方法中加一些打印日志,看下这些方法耗时如何,这些日志信息就是程序中的变动,而且是分散在各个不同的方法中的。如果我一个一个方法中去加日志信息的话,方法数量少的情况还可以勉强维护,如果数量多的话,维护起来就比较头疼了。这个时候我们就可以使用Aop来统一管理这些日志信息,后期的维护也就相对轻松的多了。
Aop实现的核心,总结起来就是拦截和代理。Aop定义了三大核心属性,分别是基础,切面和配置。基础就是需要实现实现增强的目标对象,不过项目中一般都是使用Aop来对目标方法实现增强。这个增强可以理解为增加一些其它的功能,比如上文提到的打印日志信息等。而切面的作用就是这个增强,在原有的目标对象身上增加一些额外的功能。配置的作用就是把基础和切面结合起来。
介绍完了Aop的定义,接着再来看下Aop的实现。Aop的实现中有三个接口,分别是Advice(通知),Pointcut(切点)和Advisor(通知器)。其中Advice的作用是对目标对象实现增强。虽然有了增强的功能,但是要在哪里进行增强的织入呢,这个时候就要用到Pointcut,Pointcut中定义了需要实现增强的方法的集合,然后根据正则表达式或者方法名进行匹配,确认具体要实现增强的目标方法。最后通过Advisor将Advice和Pointcut结合起来。
Aop的基本属性初步介绍了一下,下面通过一个简单的Aop应用来开始Aop实现的源码分析。
定义一个名为Student的接口:
实现类:
我们想在不改变源码的情况下,在addStudent方法的输出语句前后分别加入其它功能,比如在打印语句前后加入其它的打印信息,这中情况就是Aop的典型应用场景。根据Aop的定义,addStudent就是目标方法,需要对其实现增强功能。既然前后都都要实现增强,那么我们可以分别实现MethodBeforeAdvice接口和AfterReturningAdvice接口。这两个接口都继承Advice接口,目的就是对目标方法实现增强。
前置增强:
后置增强:
可以适当的加入些拦截器:
现在目标方法有了,增强也有了,需要将目标方法和增强结合起来,实现对目标方法的增强,这个时候就需要一个配置了。
配置:
这些配置都配置在Spring默认的配置文件中。至于配置中相关配置项的意义及作用,后面进行源码分析的时候会逐一进行解释。
测试类:
运行结果如下:
关于Spring中Aop的基本使用方式就暂且解释到此,下一篇中将会开始Aop运行原理的源码分析。
未完待续。。。。。。
Spring实现AOP源码分析
最新推荐文章于 2024-07-21 11:45:00 发布