Spring相关02——Spring AOP

89 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

什么是AOP?

AOP 是面向切面编程,是一种开发理念通过动态代理的方式为程序添加统一的功能

为什么要引入 AOP?

Java OOP 存在哪些局限性?

  • 静态化语言:类结构一旦定义,不易修改
  • 侵入性扩展:通过继承或组合来扩展功能都是侵入性的(需要改变源代码)。

AOP的优点:

  • 抽离非业务逻辑的代码(比如安全检查、监控),使原方法更专注于业务逻辑。
  • 各个步骤之间隔离性良好大大降低耦合度
  • 非侵入性扩展,扩展功能时不对源码进行修改

AOP 的实现原理?动态代理的方式有哪些?

AOP 使用动态代理实现,不需要修改源代码,而是在内存中动态生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并且在特定的切入点进行了增强处理

Spring AOP的动态代理有两种方式,JDK 动态代理CGLIB(Code Generation Library)动态代理

(1)JDK 动态代理基于接口实现代理类必须实现InvocationHandler 接口 并通过Proxy 类 的newProxyInstance方法生成动态代理对象。传入(类加载器,目标类实现的接口、InvocationHandler接口参数)

(2)CGLIB动态代理:CGLIB是用于代码生成类库,通过继承的方式实现动态代理,运行时动态的生成目标类的子类,被final修饰的类无法进行CGLIB 动态代理。

优先使用JDK动态代理,效率高,若代理类没有实现InvocationHandler 接口会自动使用 CGLIB 来动态代理目标类 ,也可以强制使用CGLIB动态代理。

简述 AOP 的使用场景?

事务管理安全检查权限控制数据校验缓存

简述 Spring AOP 中比较重要的概念

在 Spring AOP 中有以下几个概念:

  • Join point连接点,是类中可以被增强的方法
  • Pointcut切入点,类中实际被增强的方法,AspectJ 中包含哪些 Join point 需要由 Pointcut 筛选。
  • Advice通知实际增强的逻辑部分,是切面中的横切逻辑,有前置、后置、异常、环绕、最终通知。
  • AspectJ切面,把通知应用到切入点过程。