切入点表达式回顾
2022/2/9 6:13:36
本文主要是介绍切入点表达式回顾,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
切入点表达式:
完整写法:execution(方法的修饰符 方法的返回值 类的全类名.方法名(参数))
支持通配符的写法:
* : 标识任意字符串
.. : 任意重复次数
1. 方法的修饰符可以省略:
2. 返回值可以使用*号代替:标识任意返回值类型
3. 包名可以使用*号代替,代表任意包(一层包使用一个*)
4. 使用..配置包名,标识此包以及此包下的所有子包
5. 类名可以使用*号代替,标识任意类
6. 方法名可以使用*号代替,表示任意方法
7. 可以使用..配置参数,任意参数
切入点表达式代码
导入第三方jar包 <!-- 切入点表达式 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> 切入点表达式: 作用: 找到需要增强的方法 格式: 修饰符 返回值 包名.类名.方法名称(参数列表) public void com.village.service.impl.AccountServiceImpl.save()) 规则: * : 标识任意字符串 .. : 任意重复次数 public void com.village.service.impl.AccountServiceImpl.save(..) 1. 方法的修饰符可以省略: void com.village.service.impl.AccountServiceImpl.save(..) 2. 返回值可以使用*号代替:标识任意返回值类型 * com.village.service.impl.AccountServiceImpl.save(..) 3. 包名可以使用*号代替,代表任意包(一层包使用一个*) * com.village.*.*.AccountServiceImpl.save(..) 4. 使用..配置包名,标识此包以及此包下的所有子包 * com..AccountServiceImpl.save(..) 不建议 5. 类名可以使用*号代替,标识任意类 * com.village.*.*.*.save(..) 6. 方法名可以使用*号代替,表示任意方法 * com.village.*.*.*.*(..) * *.*.*.*.*(..) 不要 7. 可以使用..配置参数,任意参数 最终建议格式: * com.village.service.*.AccountServiceImpl.*(..)
切面类代码
/** * 此类为通知类: * 在该类中定义了,各种通知需要调用的相关方法 */ @Component("myAspect") @Aspect // 声明此类为切面类(通知类) public class MyAspect { /** * 定义一个无参无返回值的方法 * 在方法上添加@Pointcut注解,用于定义切入点表达式 * 引用时,只需要使用当前方法的名称() pt() */ @Pointcut("execution(* com.village.service.impl.*.*(..))") public void pt(){} /** * 前置通知调用的方法 */ //@Before("pt()") public void before(){ System.out.println("前置通知...111111111111"); } /** * 后置通知调用的方法 */ //@AfterReturning("pt()") public void afterReturning(){ System.out.println("后置通知...2222222222222"); } /** * 异常通知调用的方法 */ //@AfterThrowing("pt()") public void afterThrowing(){ System.out.println("异常通知...33333333333333"); } /** * 最终通知调用的方法 */ //@After("pt()") public void after(){ System.out.println("最终通知...44444444444444"); } /** * 环绕通知调用的方法 */ @Around("pt()") public Object around(ProceedingJoinPoint joinPoint){ Object result = null; try { System.out.println("前置通知..."); // 相当于 方法字节码对象.invoke(); // 让原方法执行 result = joinPoint.proceed(); System.out.println("后置通知..."); } catch (Throwable throwable) { throwable.printStackTrace(); System.out.println("异常通知..."); }finally { System.out.println("最终通知...44444444444444"); } return result; } }
这篇关于切入点表达式回顾的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?