Spring Aop(面向切面编程)
一、Spring Aop(面向切面编程)是什么?
(1)面向切面编程(AOP)和面向对象编程(OOP)类似,也是一种编程模式。Spring AOP是基于AOP编程模式的一个框架,它的使用有效减少了系统间的重复代码,达到了模块间的松耦合目的。
(2)AOP的全称是“Aspect Oriented Programming”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。
(3)AOP采取横向抽取机制,取代了传统纵向继承体系的重复代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理
(4)目前最流行的AOP框架有两个,分别为Spring AOP和AspectJ。
(5)Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。
(6)AspectJ 是一个基于 Java 语言的 AOP 框架,从 Spring 2.0 开始,Spring AOP 引入了对 AspectJ 的支持。AspectJ 扩展了 Java 语言,提供了一个专门的编译器,在编译时提供横向代码的植入。
(7)AOP的相关术语
7.1 Joinpoint(连接点):指那些被拦截到的点,在 Spring 中,可以被动态代理拦截目标类的方法。
7.2 Pointcut(切入点):指要对那些 Joinpoint 进行拦截,即被拦截的连接点。
7.3 Advice(通知):被拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容。
7.4 Target(目标):指代理的目标对象。
7.5 Weaving(植入):指把增强的代码应用到目标上,生成代理对象的过程。
7.6 Proxy(代理):指生成的代理对象。
7.7 Aspect(切面):切入点和通知的结合。
二、Spring JDK动态代理
JDK动态代理是通过JDK中的java.lang.reflect.Proxy类实现的。具体案例如下:
文档链接: 点此看详细文档
三、Spring CGLIB动态代理
JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理。
文档链接:点此看详细文档
四、Spring通知类型和创建AOP代理
讲解了 AOP 手动代理的两种方式,下面通过讲解 Spring 的通知介绍 Spring 是如何创建 AOP 代理的。
文档链接:点此看详细文档
五、Spring使用AspectJ开发AOP
AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言。Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 AspectJ 方式开发 AOP。
使用AspectJ开发AOP通常有两种方式:
- 基于XML的方式
- 基于注解的方式
基于XML的方式:
文档链接:点此看详细文档
基于注解的方式:
文档链接:点此看详细文档