Spring AOP知识要点看这一篇就够了
AOP是什么
aspect oriented programming得缩写中文就是面向切面面编程,是通过预编译方式和运行期动态代理实现程序功能得统一维护的一种技术。
动态代理可以在不修改源码的情况下对目标方法进行增强。可以完成程序之间的松耦合。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性。
作用和优势
- 作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强
- 优势:减少重复代码,提高开发效率,便于维护。
AOP大致功能模拟
- AOP就是完成目标方法和增强方法动态结合的方法,从而完成松耦合。当然了要想进行结合肯定要有一些联系的不然要是孙悟空和刘备拜了兄弟谁能答应。我们通常通过配置文件来描述这种关系。
- 目标和增强的结合也是切面的雏形
低层实现
低层是通过Spring提供的动态代理技术实现的,在运行时Spring通过动态代理技术动态的生成代理对象,代理对象方法执行的时候进行增强功能的介入,再调用目标对象的方法从而完成功能的增强。
AOP的动态代理技术也是我们常见的JDK基于接口的动态代理技术和cglib基于父类的动态代理技术
相关概念
- Target:代理的目标方法
- Proxy:一个类被AOP织入增强后,就产生了代理类
- Joinpoint:指的是那些被拦截到的点(方法),也就是可以被增强的方法
- Pointcut:指的是我们要对哪些Joinpoint进行拦截的定义
- Advice:指的是拦截到JoinPoint之后要做的事情(增强)
- Aspect:是Pointcut和Advice的结合
- Weaving:是指把增强应用到目标对象来创建新的代理对象的过程,Spring采用动态代理织入而Aspectj采用预编译期织入和类装载期植入
AOP开发中需要明确
-
编写内容
1·编写核心业务代码〔目标类的目标方法)
2·编写切面类,切面类中有通知(增强功能方法)
3·在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合 -
实现的内容
Spring框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。 -
使用哪一种代理方式
AOP的XML开发
切点表达式的写法
我们这里就先写一下表达式的一点总结,等后面我们再具体总结:
表达式语法: execution([修饰符]返回值类型包名类名方法名(参数) 访问修饰符可以省略
返回值类型、包名、类名、方法名可以使用星号*代表任意
包名与类名之间一个点.代表当前包下的类,两个点..表示当前包及其子包下的类参数列表可以使用两个点..表示任意个数,任意类型的参数列表
- 1
- 2
- 3
- 4
- 5
另外对于切点表达式也可以进行引用抽取
<aop:pointcut id="poincut" expression="...."/>
<aop:通知类型method=“切面类中方法名”pointcut-ref=“要引用的id"></aop;通知类型>
- 1
- 2
- 3
通知的类型
<aop:通知类型method=“切面类中方法名”pointcut=“切点表达式"></aop;通知类型>
- 1
- 前置通知
aop:before
用于配置前置通知。指定增强的方法在切入点方法之前执行 - 后置通知
aop:after-returning
用于配置后置通知。指定增强的方法在切入点方法之后执行 - 环绕通知
aop:around
用于配置环烧通知。指定增强的方法在切入点方法之前和之后都执行 - 异常抛出通知
aop:throwing
用于配置异常抛出通知。指定增强的方法在出现异常时执行 - 最终通知
aop:after
用于配置最终通知,无论增强方式执行是否有异常都会执行
AOP注解开发
除了要配置组件扫描aop自动代理和对切面的声明还要了解以下的几种注解
通知的配置语法:@通知注解("切点表达式)
- @Before
用于配置前置通知。指定增强的方法在切入点方法之前执行
后置通知 - @AfterReturning
用于配置后置通知。指定增强的方法在切入点方法之后执行
环绕通知 - @Around
用于配置环绕通知。指定增强的方法在切入点方法之前和之后都执行
异常抛出通知 - @AfterThrowing
用于配置异常纯出通知。指定增强的方法在出现异常时执行
最终通知 - @After
用于配置最终通知。无论增强方式执行是否有异常都会执行
这些东西有机会我们会详解,这里我们就是一个入门,不然都写得话我怕可以写一本书出来。
文章来源: blog.csdn.net,作者:肥学,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jiahuiandxuehui/article/details/124769154
- 点赞
- 收藏
- 关注作者
评论(0)