一.AOP的概述:
什么是AOP的技术?
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程
· AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构
· AOP最早由AOP联盟的组织提出的,制定了一套规范.Spring将AOP思想引入到框架中,必须遵守AOP联盟的规范
· 通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术
· AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型
· 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
AOP:面向切面编程.(思想.---解决OOP遇到一些问题)
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
为什么要学习AOP,可以在不修改源代码的前提下,对程序进行增强!!
二.AOP的优势
运行期间,不修改源代码的情况下对已有的方法进行增强
优势
1. 减少重复的代码
2. 提供开发的效率
3. 维护方便
三.JDK的动态代理技术
1、为接口创建代理类的字节码文件
2、使用ClassLoader将字节码文件加载到JVM
3、创建代理类实例对象,执行对象的目标方法
cglib代理技术
四. AOP相关的术语
Joinpoint(连接点) 所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
Pointcut(切入点) -- 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
Advice(通知/增强)-- 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Target(目标对象)-- 代理的目标对象
Weaving(织入)-- 是指把增强应用到目标对象来创建新的代理对象的过程
Proxy(代理)-- 一个类被AOP织入增强后,就产生一个结果代理类
Aspect(切面)-- 是切入点和通知的结合,以后咱们自己来编写和配置的
五.Spring的AOP技术-配置文件方式
1.创建项目:按照图示直接点击next,不需要任何勾选
2.项目框架:按照图示创建模块:
3.引入坐标依赖:
pom.xml文件
在这个位置引入依赖:
4.创建Spring的配置文件,引入具体的AOP的schema约束
5.创建包结构,编写具体的接口和实现类
UserServiceImpl类:
UserService接口:
MyXmlAspect类:
在applicationContext.xml添加如下配置,将UserService,MyXmlAspect交给Spring管理
在applicationContext.xml配置文件中完成aop的配置(这里用的前置通知会在后面AOP的五种通知方式中介绍到)
编写测试方法Demo2:
运行结果:
五.通知类型的五种分类
1. 前置通知 目标方法执行前,进行增强。
运行结果如下:
2. 最终通知 目标方法执行成功或者失败,进行增强。
(1)目标方法执行成功的情况:
(2)目标对象执行失败的情况,这里我们简单设置一个除0异常即可
运行结果如下:
3. 后置通知 目标方法执行成功后,进行增强。
运行结果如下:
4. 异常通知 目标方法执行失败后,进行增强。
目标方法我们设置一个除0异常,是他无法正常运行。
查看运行结果:
可以看到,只执行了增强的方法,而目标方法显示报错:
5. 环绕通知 目标方法执行前后,都可以进行增强。目标对象的方法需要手动执行。
(1)目标方法正常运行条件下执行的结果:
(2)设置除0异常之后我们的执行结果:
很显然在目标方法执行前后都运行了增强方法
小结:关于AOP的五种通知类型我的理解就是在目标对象执行前后或者异常时执行某种逻辑,他并不一定执行一次,很明显的就是环绕通知这一类型,你可以将他理解为,你执行目标方法需要初始化,运行时异常需要报错,而最终成功执行就会输出,只不过为了便于理解我们将抽象的增强方法具体为要采取的实际举动。
七.Spring的AOP技术-半注解方式
创建maven工程,导入坐标。编写接口,完成IOC的操作。步骤略。
编写切面类
给切面类添加注解 @Aspect,编写增强的方法,使用通知类型注解声明
需要新建的:
MyAnnoAspect:
OrderServiceImpl:
OrderService:
配置类applicationContext_demo3.xml:
测试类:Demo3:
测试结果(这里用的是前置通知):
八.Spring的AOP技术-纯注解方式
将七中的配置文件删除
新建一个配置类SpringConfig:
因为没有配置文件了,我们无法在配置文件中注入依赖,所以我们想要将类交给spring管理就需要在该类上面添加注解
新建测试文件Demo3:
原先我们使用的是配置文件的路径,如下:
而现在我们使用的配置类,如下:
运行结果(默认使用前置通知):
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/43878.html