Aop常用注解和相关术语

AOP

AOP:全称是Aspect Oriented Programming即:面向切面编程。

面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

简单的说它就是把我们程序重复的代码抽取出来,
在需要执行的时候,使用代理的技术,在不修改源码的基础上,对已有方法进行增强。

AOP的常用注解

@Aspect:

作用:把当前类声明为切面类。

@Before:

作用:把当前方法看成是前置通知。
属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 

@After

作用:把当前方法看成是始终通知。
属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@AfterReturning

作用:把当前方法看成是后置通知。
属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@AfterThrowing

作用:把当前方法看成是异常通知。
属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@Around

作用:把当前方法看成是环绕通知。
属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@Pointcut

作用:指定切入点表达式
属性: value:指定表达式的内容

AOP实现方法

Spring AOP 主要通过2种代理技术来实现:动态代理、CGLIB

动态代理:用于对接口+实现类情况进行代理。
@EnableAspectJAutoProxy(proxyTargetClass = false)

CGLIB:用于对仅有实现类情况进行代理。
@EnableAspectJAutoProxy(proxyTargetClass = true)

相关AOP术语

Target(目标对象):
		代理的目标对象。
		例如:UserServiceImpl
Joinpoint(连接点):
		所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。
		例如:addUser()/ updateUser()
Pointcut(切入点):
		所谓切入点是指我们要对哪些Joinpoint进行拦截的定义。
		例如:addUser()
Advice(通知/增强):
		所谓通知是指拦截到Joinpoint之后所要做的事情就是通知。
		通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
		例如:bf()、af()
Aspect(切面):
		是切入点和通知的结合。
		例如:MyAspect类
Proxy(代理):
		一个类
<think>首先,用户的问题是:“我想理解Spring AOP中的相关术语 请问Spring AOP 常用术语 解释”,意思是“我想理解Spring AOP中的相关术语,请问Spring AOP常用术语解释”。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式。但在这个问题中,没有数学表达式,所以可能不需要。 - 独立公式必须使用$$...$$格式并单独成段。同样,这里可能不适用。 - LaTeX语法正确。确保任何数学表达正确。 - 使用中文回答。整个回答要用中文。 - 生成相关问题。在回答末尾,添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。参考提供的引用,我需要引用这些来源。 提供的引用有: - 引用[1]: 关于Spring AOP术语。 - 引用[2]: 关于Spring AOP相关术语解释及简单使用。 - 引用[3]: 关于SpringAOP中名词解释。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题你的回答。” 用户上一次的问题是这个,所以没有历史。我应该基于这些引用构建回答。 用户可见层指令:回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 所以,我需要解释Spring AOP常用术语,基于提供的引用。 从引用中提取关键术语: - 从引用[1]: 切面、通知、切入点、连接点、引介、目标对象、代理对象、织入、通知方法、切点表达式、切面优先级、织入器、AOP代理、AOP框架。 - 从引用[2]: 通知(Advice)。 - 从引用[3]: 连接点(JoinPoint)、切入点(Pointcut)、通知(Advice)、目标对象(Target Object)、织入(Weaving)、代理(Proxy)、切面(Aspect)。 常见术语包括:切面、通知、切入点、连接点、目标对象、代理、织入等。 我应该覆盖核心术语。 结构化回答: 1. **介绍**:简要介绍Spring AOP术语的重要性。 2. **解释每个术语**:逐个解释常用术语。 3. **总结**:强调AOP的好处。 4. **生成相关问题**:在最后添加相关问题。 使用引用:在解释每个术语时,如果基于引用,自然地添加引用标识,如[^1]。 例如,解释连接点时,可以引用[^3]。 最终,添加相关问题。 相关问题应该与主题相关,比如: - 如何定义一个切入点? - Spring AOP中的通知类型有哪些? - 织入的过程是怎样的? 确保回答清晰、逐步。 现在,写出回答。</think>### Spring AOP 常用术语解释 Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,用于将横切关注点(如日志、事务管理)与核心业务逻辑分离,从而提高代码的模块化、可维护性可重用性。理解其核心术语是掌握 Spring AOP 的基础。以下我将基于权威资料,逐步解释 Spring AOP常用术语,确保解释清晰可靠。每个术语的解释都参考了相关文献,并在末尾添加了引用标识。 #### 1. **连接点(Join Point)** 连接点是程序执行过程中的一个特定点,例如方法调用、字段访问或异常抛出。在 Spring AOP 中,连接点通常指方法的调用(如 `UserService.save()` 方法)。它表示 AOP 可以插入增强逻辑的位置。连接点是动态的,由 AOP 框架在运行时识别[^3]。 #### 2. **切入点(Pointcut)** 切入点是一组连接点的集合,通过表达式定义哪些连接点需要被增强。例如,表达式 `execution(* com.example.service.*.*(..))` 表示所有 `com.example.service` 包下的方法调用。切入点用于精确控制 AOP作用范围,避免不必要的增强[^3]。 #### 3. **通知(Advice)** 通知是在切入点指定的连接点上执行的具体动作。它定义了“何时”“做什么”。通知分为多种类型: - **前置通知(Before)**:在方法执行前执行(如权限检查)。 - **后置通知(After)**:在方法执行后执行,无论是否成功(如资源清理)。 - **返回通知(After-returning)**:方法成功返回后执行(如日志记录)。 - **异常通知(After-throwing)**:方法抛出异常时执行(如错误处理)。 - **环绕通知(Around)**:包裹方法执行,可以控制方法执行前后过程(如事务管理)。 通知是 AOP 的核心行为单元,通过组合实现横切关注点[^1][^2]。 #### 4. **切面(Aspect)** 切面是通知切入点的组合,封装了横切关注点的完整逻辑。例如,一个日志切面可能包含“所有Service类方法调用”的切入点“记录方法参数”的通知。切面在代码中作为独立模块定义,提高了代码的模块化程度[^1][^3]。 #### 5. **目标对象(Target Object)** 目标对象是被代理的原始对象,包含业务逻辑的核心方法。例如,一个 `UserServiceImpl` 类实例。AOP 增强逻辑不会直接修改目标对象,而是通过代理机制间接操作[^3]。 #### 6. **代理(Proxy)** 代理是 AOP 框架创建的对象,用于包装目标对象。当调用目标对象的方法时,代理会触发通知逻辑。Spring AOP 使用 JDK 动态代理(针对接口)或 CGLIB 代理(针对类)实现代理机制。代理对象在运行时动态生成,对调用者透明[^1][^3]。 #### 7. **织入(Weaving)** 织入是将切面应用到目标对象的过程,即将通知逻辑“编织”到连接点。在 Spring AOP 中,织入通常在运行时完成(动态代理),但也支持编译时或类加载时织入。织入是 AOP 实现的关键步骤,确保增强逻辑无缝集成[^1][^3]。 #### 8. **引介(Introduction)** 引介是一种特殊的通知,用于为目标对象动态添加新接口或方法。例如,为一个现有类添加 `Auditable` 接口及其方法。引介扩展了对象的功能,而无需修改源代码,适用于横切关注点的全局增强[^1]。 #### 9. **切点表达式(Pointcut Expression)** 切点表达式是用于定义切入点的字符串,基于 AspectJ 语法。例如,`@annotation(org.springframework.transaction.annotation.Transactional)` 表示所有带 `@Transactional` 注解的方法。表达式支持通配符逻辑运算符,实现灵活的匹配规则[^1]。 #### 总结 Spring AOP术语体系(如连接点、切入点、通知、切面)构成了其核心架构,通过代理织入机制实现非侵入式增强。合理使用 AOP 可以减少重复代码、降低耦合度,提升开发效率系统可维护性[^1][^2][^3]。如果您有具体场景(如日志或事务),可以进一步探讨实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值