Spring学习 ------- SpringAOP学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43213517/article/details/100087516

SpringAOP学习

什么是AOP

AOP:面向切面编程,是对OOP(面向对象编程)的一种补充。假如有这么一个场景,当需要为多个没有关系的类引入一些公共的行为(方法)例如日志记录,安全权利,事务管理等功能,必然每个类都需要引入这些代码,获取可以将这些公共的方法抽出来,放在一个模板类中,其它来继承这个模板类,但这样是会加大程序中,类与类的耦合,而且继承本身就带有很大的局限性,因此AOP应运而生。
在这里插入图片描述

AOP的本质

SpringAOP本质上就是一个代理模式,代理模式可以很好的解决上述问题,在不影响目标对象的基础上,对目标对象进行增强,即在其它类中引入日志记录,事务管理等方法。
代理模式又分为动态代理,和静态代理,静态代理具有很大的局限性,每一个需要被增强的类,都需要一个代理类,这个代理类必须由程序员来创建,因此如果有多个目标类,也必须有多个代理类。

因此动态代理才是关注的焦点。

  • JDK动态代理
  • CGLIB动态代理

区别:

JDK的动态代理,基于反射机制实现,被代理类必须实现一个接口,而自动生成的代理类也会实现这个接口。
Cglib动态代理,采用继承机制,代理类和被代理类是继承关系。

AOP术语

  • Advice:通知,所要增强或者增加的功能,定义了切面的“什么”和“何时”。

    • Before:方法被调用之前通知
    • After:方法调用之后通知
    • After-returning:方法成功执行后通知
    • After-throwing:在方法抛出异常后通知
    • Around:环绕通知,在调用之前和之后都通知
  • Aspect:切面,横切关注点模块化为特殊的类,切面是通知和切点的结合

  • Join Point:连接点,应用执行过程中,能够插入切面的时机

  • Pontcut:切点,选择插入切面的位置,即定义了哪些点要得到增强

  • Weaving:织入,把切面应用到目标对象并创建代理对象的过程,在目标对象的生命周期有多个点可以进行织入,编译期,类加载期,运行期。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43213517/article/details/100087516
今日推荐