SpringAOP简单理解

1 SpringAOP是什么?

Aspect Oriented Programming:面向切面编程,是通过预编译方式和运行期动态代理的方式实现程序功能统一维护的一种技术。
SpringAOP:AOP是一种技术,或者说是一种编程思想,其中Spring框架集成实现了AOP此种思想,SpringAOP在底层实现了自动的封装动态代理过程,使得我们在应用过程中只需要关注逻辑业务代码的编写和配置。

2 SpringAOP的优劣势

2.1 优势

SpringAOP优势在于解耦,减少代码编写,提高开发效率,在不修改源代码的情况下对方法进行增强

2.2 缺点

3 底层实现

底层是依靠Spring提供的动态代理技术实现的,运行期间,Spring通过动态代理技术动态生成代理对象,代理对象方法在执行时相应的通知/增强方法进行及时介入,从而完成功能的增强。
这里是目标增强方法所在类生成一个代理类。

4 动态代理技术

常用的动态代理技术分为两种①JDK代理②cglib代理
①JDK:基于接口的动态代理技术,需求目标增强方法所在类有接口
②cglib:基于父类的动态代理技术,没有接口的基于此类技术

在实际开发中我们只需要配置即可,不用去专注其中的过程

5 常用术语

Target:目标对象,代理的目标对象(需要被增强方法的对象)
Proxy:代理,
joinpoint:连接点,在Spring中,指的是方法。
pointcut:切入点,被选中需要进行增强的方法才是切入点;pointcut包含于joinpoint
Advice:通知/增强方法,切面类中的方法,用于增强切入点
Aspect:切面,切入点+通知的组合
Weaving:织入,是指把增强应用到目标对象来创建新的代理对象的过程,Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入

6 一般开发过程

编写的内容:1 编写核心业务代码
2 编写切面类(包含增强方法)
3 配置文件中,配置织入关系
AOP技术实现的过程:Spring框架监控切入点方法的执行,一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。
AOP底层代理实现方式:1 JDK
2 cglib
会优先使用JDK,如果没有则使用cglib

7 XML配置方式快速入门

1 导入AOP相关坐标
spring-context
aspectjweaver
2 创建目标接口和目标类
3 创建切面类(增强/通知)
4 配置,将目标类和切面类的对象创建权交给SpringIOC容器管理
5 在applicationContext.xml中配置织入关系
6 测试代码

8 XML配置详解

切点表达式的写法:
execution([权限修饰符]返回值类型 包名.类名.方法名(参数))
访问修饰符可以省略
返回值类型、包名、类名、方法名可以使用星号*代表任意
包名与类名之间一个点.代表当前包下的类,两个点…表示当前包及其子包下的类
参数列表可以使用两个点…表示任意个数,任意类型的参数列表

通知的类型:
前置通知aop:before
用于配置前置通知,指定增强的方法在切入点方法之前执行
后置通知
用于配置后置通知,指定增强方法在切入点方法之后执行
环绕通知
用于配置环绕通知,指定增强的方法在切入点方法之前和之后都执行
异常抛出通知aop:throwing
用于配置异常抛出通知,指定增强的方法在出现异常时执行
最终通知aop:after
用于配置最终通知,无论增强方式执行是否有异常都会执行

切点表达式的抽取:
1 抽取切点表达式
<aop:pointcut id=“myPointcut” expression=“execution(* com.itheima.aop..(…))”/>
2 引用
<aop:around method=“around” pointcut-ref=“myPointcut”/>

9 注解配置方式快速入门

1 创建目标接口和目标内(内部有切点)
2 创建切面类(内部有增强方法)
3 将目标类和切面类的对象创建权交给Spring(IOC容器)
4 在切面类中使用注解配置织入关系
5 在配置文件中开启组件扫描和AOP的自动代理
6 测试

10 注解配置详解

通知的配置语法
@通知注解(“切点表达式”)
前置通知@Before
用于配置前置通知,指定增强的方法在切入点方法之前执行
后置通知@AfterReturning
用于配置后置通知,指定增强方法在切入点方法之后执行
环绕通知@Around
用于配置环绕通知,指定增强的方法在切入点方法之前和之后都执行
异常抛出通知@AfterThrowing
用于配置异常抛出通知,指定增强的方法在出现异常时执行
最终通知@After
用于配置最终通知,无论增强方式执行是否有异常都会执行

切点表达式的抽取
同xml配置一样,我们可以将切点表达式抽取,抽取方式是在切面内定义方法,在该方法上使用@Pointcut注解定义切点表达式,然后再在增强注解中引用
1 配置抽取方法,并使用注解@Pointcut()
@Pointcut(“execution(* com.itheima.anno..(…))”)
public void pointCut(){
}
2 在通知/增强方法中的配置参数调用
第一种
@Around(“pointCut()”)
第二种
@Before(“MyAspect.pointCut()”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值