AOP技术详解

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: Spring AOP则是Spring框架的一部分,它提供了基于代理的AOP实现方式,并支持AspectJ的注解

概念

横切关注点

横切关注点通常包括日志记录、事务管理、安全性、性能监控等,它们跨越多个类和模块,并且与业务逻辑代码正交

切面

AOP中,这些横切关注点被封装在“切面”(Aspect)中

切面定义了何时(when)、何地(where)以及如何(how)应用这些横切逻辑。切面可以看作是一个包含通知(Advice)和切点(Pointcut)的模块

通知

通知定义了横切逻辑的具体实现

切点

切点则定义了通知应该应用到哪些连接点(Join Point)上

连接点

连接点是程序执行过程中的一个特定点,如方法的调用或异常的处理

简介

面向切面编程,是对面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现,在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

核心思想

将横切关注点与业务逻辑代码分离,以提高代码的可维护性、可重用性和模块化。通过将横切关注点封装在切面中,可以避免在多个类中重复编写相同的代码,并且可以在不修改现有代码的情况下添加新的横切逻辑

SpringAOP

Spring AOP则是Spring框架的一部分,它提供了基于代理的AOP实现方式,并支持AspectJ的注解

SpringAOP是Spring框架的一部分,与Spring的其他功能(如事务管理、安全等)紧密集成,提供了方便的扩展和定制能力

Spring AOP使用纯Java实现,通过运行时动态代理的方式(基于JDK动态代理或CGLIB)向目标类织入增强代码

JDK动态代理

Spring AOP默认使用JDK Dynamic Proxy来生成代理对象

JDK动态代理是基于接口的代理,它要求目标类必须实现一个或多个接口

如果目标类实现了接口,Spring会默认使用JDK动态代理

JDK动态代理通过实现InvocationHandler接口来调用原对象的实现,并且所有要被代理的方法都必须是接口中声明的方法

CGLIB动态代理

如果目标对象没有实现接口,Spring AOP则会使用CGLIB(Code Generation Library)来生成代理对象

CGLIB动态代理是一种基于继承的代理,它不要求目标类实现任何接口

它通过生成目标类的子类来实现代理,因此即使目标类是一个普通的类,也能够进行代理

CGLib动态代理的性能通常比JDK动态代理要好,但可能会因为继承的问题导致某些问题

相关文章
|
6月前
|
Java 关系型数据库 MySQL
利用Spring AOP技术实现一个读写分离
利用Spring AOP技术实现一个读写分离
50 0
|
23天前
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
51 5
|
5月前
|
XML Java 数据格式
技术好文:Spring基础篇——AOP切面编程
技术好文:Spring基础篇——AOP切面编程
|
6月前
|
XML 存储 Java
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
71 0
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
|
11月前
|
存储 Java 数据库
spring核心技术(下)--面向切面aop的特点加案例论证
spring核心技术(下)--面向切面aop的特点加案例论证
|
XML Cloud Native Java
Spring AOP使用指南: 强大的面向切面编程技术
Spring AOP使用指南: 强大的面向切面编程技术
101 0
|
XML 安全 Java
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
486 0
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
|
XML 安全 Java
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
329 0
【框架】[Spring]纯Java的方式实现AOP切面(拦截)技术
|
监控 Java Android开发
【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
365 0
【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
|
XML Java Android开发
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
241 0
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术