AOP

简介: AOP

代理分为静态代理动态代理,静态代理,顾名思义,就是你自己写代理对象,动态代理,则是在运行期,生成一个代理对象。


Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理了


(为啥?你写一个JDK Proxy的demo就知道了),这时候Spring AOP会使用Cglib,生成一个被代理对象的子类,来作为代理,放一张图出来就明白了:



好,上面讲的是AOP的第一种实现,运行时织入


但是不是所有AOP的实现都是在运行时进行织入的,因为这样效率太低了,而且只能针对方法进行AOP,无法针对构造函数、字段进行AOP。


我完全可以在编译成class时就织入啊,比如AspectJ,当然AspectJ还提供了后编译器织入和类加载期织入,这里我就不展开讨论了



相关文章
|
3月前
AOP&面向切面编程
AOP&面向切面编程
70 0
|
17天前
|
中间件 Java Go
你知道什么是 AOP 吗?
你知道什么是 AOP 吗?
24 0
|
XML Java 数据格式
三、AOP(二)
三、AOP(二)
71 0
|
10月前
|
Java 编译器 Maven
AOP
底层实现方式之一是代理,由代理结合通知和目标,提供增强功能 除此以外,aspectj 提供了两种另外的 AOP 底层实现: 第一种是通过 ajc 编译器在编译 class 类文件时,就把通知的增强功能,织入到目标类的字节码中 第二种是通过 agent 在加载目标类时,修改目标类的字节码,织入增强功能 作为对比,代理是运行时生成新的字节码 简单比较的话: aspectj 在编译和加载时,修改目标字节码,性能较高 aspectj 因为不用代理,能突破一些技术上的限制,例如对构造、对静态方法、对 final 也能增强 但 aspectj 侵入性较强,且需要学习新的 aspectj 特有语
50 1
|
XML Java 数据格式
三、AOP(一)
三、AOP(一)
69 0
三、AOP(一)
|
Java
AOP详细介绍
AOP(Aspect-Oriented Programming)是一种编程范式,旨在通过将横切逻辑(cross-cutting concerns)从核心业务逻辑中分离出来,以提高代码的可维护性和可重用性。在Java中,AOP可以通过动态代理来实现。
459 0
|
监控 Java 数据安全/隐私保护
什么是AOP?
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,通过将横切关注点(Cross-cutting Concerns)从核心业务逻辑中分离出来,使得代码的组织结构更清晰,易于维护和扩展。
236 0
|
Java Spring
实现一个简单的AOP
实现一个简单的AOP
|
数据安全/隐私保护
你不是说你会Aop吗?
你不是说你会Aop吗?
114 0
|
Java Spring 容器