面向切面编程(AOP)与代理模式的关系

简介: 面向切面编程(AOP)与代理模式的关系

正文


今天的问题是,Spring使用的什么样的技术实现的AOP,每种技术的特点是什么?是静态代理还是动态代理?如果让你实现AOP的功能可以使用哪几种的方式。

代理模式:是程序设计中的一种设计模式。所谓的代理者是指一个类别可以作为被代理的对象的执行者。(属于结构型的设计模式)

Spring的AOP的实现:他的实现一共采取了2种方式,第一个是SpringAOP(也即是自己实现的),还有一个就是采用AspectJ实现的。都是实现AOP的功能,他们之间有什么区别的?首先,Spring自己的实现的AOP采用的是JDK或者CGlib动态代理实现的,然而AspectJ实现的AOP采用的是静态代理实现的。这是他们实现的根本区别!!!!

显而易见,根据上面的实现方式,可以知道,JDK的代理采用的是继承Proxy类的方式实现,所以必须面向接口的实现。然而CGlib采用的是实现类的方式,所以不需要被代理对象实现接口或者拥有接口类。采用AspectJ实现的就比较特殊了,它实际上直接采用静态的代理方式实现的,也就是说直接修改.class编译好的代码,就是修改机器码的方式实现的。

如果自己想实现,如何实现呢?实际上Java为我们提供了一个组件

Instrumentation

可以采用这个组件帮助我们服务运行的时候,动态的修改二进制编译后的代码。实际上阿里巴巴的Arthas的底层原理就是这样实现的,帮助我们解决在没有日志的情况下,实现打印请求参数、响应结果以及抛出的异常

相关文章
|
3月前
|
设计模式 SQL 运维
面向切面:AOP(1)
面向切面:AOP(1)
50 2
面向切面:AOP(1)
|
3月前
|
Java 数据库连接 应用服务中间件
Spring5源码(39)-Aop事物管理简介及编程式事物实现
Spring5源码(39)-Aop事物管理简介及编程式事物实现
26 0
|
4月前
AOP&面向切面编程
AOP&面向切面编程
56 0
|
29天前
|
Java Spring
代码优雅的转变:基于注解的AOP编程在Spring中的实践
代码优雅的转变:基于注解的AOP编程在Spring中的实践
17 0
|
29天前
|
XML 监控 Java
Spring AOP:解锁切面编程的威力与实践
Spring AOP:解锁切面编程的威力与实践
22 0
Spring AOP:解锁切面编程的威力与实践
|
1月前
|
XML 安全 Java
spring面向切面编程AOP
spring面向切面编程AOP
|
1月前
|
Java
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
6 0
|
4月前
|
XML 存储 Java
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
55 0
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
|
4月前
|
XML Java 数据格式
Spring 的AOP 简介,面向切面编程AOP
Spring 的AOP 简介,面向切面编程AOP
64 0
|
4月前
|
Java 程序员 Maven
Spring AOP入门指南:轻松掌握面向切面编程的基础知识
Spring AOP入门指南:轻松掌握面向切面编程的基础知识