AOP概念、术语、实现

AOP是面向切面编程,是对OOP的补充,用于解决系统中多个模块共有的需求,如日志记录。AOP包含关键术语:Target、Aspect、Weaving、JoinPoint和Pointcut。AspectJ是语言级实现,SpringAOP则是纯Java实现,支持动态代理。JDK动态代理和CGLib分别在有无接口情况下进行织入。
摘要由CSDN通过智能技术生成

概念

AOP (Aspect Oriented Programing)
面向切面编程的思想,
是一种编程思想,是对OOP(Object Oriented Programming)的补充,可以进一步提高编程效率。

如果系统的很多业务模块都有同样的系统需求,比如记录日志等。使用AOP可以解决这类问题,单独定义组件,不与业务组件产生关系,不需要在业务组件中调用
在这里插入图片描述

术语

Target表示目标组件
Asbect 方面, 单独封装的组件
Weaving 织入 (三种方式)
JoinPoint 连接点,目标对象可以被织入的位置(属性、构造器、静态块、成员方法等)
Pointcut 切点(织入到哪些对象的哪些位置)
Advice 通知,实现织入的具体逻辑
在这里插入图片描述

AOP的实现

AspectJ

语言级的实现,扩展了java语言,定义了AOP语法。是一门新的语言,优势是可以解决所有AOP的问题,但学一门语言的代价较高
在编译期织入代码,有一个专门的编译器用来生成遵守java字节码规范的class文件
支持所有的连接点

Spring AOP

使用纯java实现,不需要专门的编译过程和特殊的类装载器;
在运行时通过代理的方式织入代码,只支持方法类型的连接点(最常见);
支持对AspectJ的集成。

代理

JDK动态代理

java提供的动态代理技术,可以在运行时创建接口的代理实例
Spring AOP默认采用此种方式,在接口的代理实例中织入代码

CGLib动态代理

采用底层的字节码技术,在运行时创建子类代理实例
当目标对象不存在接口时,Spring AOP会采用此种方式,在子类实例中织入代码

该文章内容来自牛客网java面试项目课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值