[原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.切面的优先级
1) 在同一个连接点上应用不止一个切面时, 除非明确指定, 否则它们的优先级是不确定的.
2) 切面的优先级可以通过实现 Ordered 接口或利用 @Order 注解指定.
3) 实现 Ordered 接口, getOrder() 方法的返回值越小, 优先级越高.
4) 若使用 @Order 注解, 序号出现在注解中
ValidateArgs.java
1 package com.jason.spring.aop.impl; 2 3 import java.util.Arrays; 4 5 import org.aspectj.lang.JoinPoint; 6 import org.aspectj.lang.annotation.Aspect; 7 import org.aspectj.lang.annotation.Before; 8 import org.springframework.context.annotation.Bean; 9 import org.springframework.core.annotation.Order; 10 import org.springframework.stereotype.Component; 11 12 /** 13 * 14 * @ClassName:ValidateArgs 15 * @Description:可以使用@Order 注解指定切面的优先级,值越小优先级越高 16 * @author: jason_zhangz@163.com 17 * @date:2016年12月6日下午2:14:55 18 * 19 * 20 * 21 */ 22 @Order(2) 23 @Component 24 @Aspect 25 public class ValidateArgs { 26 27 @Before("execution(* com.jason.spring.aop.impl.ArithmeticCaculator.*(..))") 28 public void validateArgs(JoinPoint joinPoint){ 29 System.out.println("validate:" + Arrays.asList(joinPoint.getArgs())); 30 } 31 32 }
LoggingAspect.java
1 package com.jason.spring.aop.impl; 2 3 import java.util.Arrays; 4 import java.util.List; 5 6 import org.aspectj.lang.JoinPoint; 7 import org.aspectj.lang.ProceedingJoinPoint; 8 import org.aspectj.lang.annotation.After; 9 import org.aspectj.lang.annotation.AfterReturning; 10 import org.aspectj.lang.annotation.AfterThrowing; 11 import org.aspectj.lang.annotation.Around; 12 import org.aspectj.lang.annotation.Aspect; 13 import org.aspectj.lang.annotation.Before; 14 import org.aspectj.lang.annotation.Pointcut; 15 import org.springframework.core.annotation.Order; 16 import org.springframework.stereotype.Component; 17 18 19 @Order(1) 20 //把这个类声明为一个切面 21 //1.需要将该类放入到IOC 容器中 22 @Component 23 //2.再声明为一个切面 24 @Aspect 25 public class LoggingAspect { 26 27 /** 28 * 29 * @Author:jason_zhangz@163.com 30 * @Title: declareJointPointExpression 31 * @Time:2016年12月6日 32 * @Description: 定义一个方法,用于声明切入点表达式。一般的,该方法不需要添加其他代码 33 * 34 */ 35 @Pointcut("execution(* com.jason.spring.aop.impl.*.*(int, int))") 36 public void declareJointPointExpression(){} 37 38 39 //声明该方法是一个前置通知:在目标方法开始之前执行 哪些类,哪些方法 40 //作用:@before 当调用目标方法,而目标方法与注解声明的方法相匹配的时候,aop框架会自动的为那个方法所在的类生成一个代理对象,在目标方法执行之前,执行注解的方法 41 //支持通配符 42 //@Before("execution(public int com.jason.spring.aop.impl.ArithmeticCaculatorImpl.*(int, int))") 43 @Before("declareJointPointExpression()") 44 public void beforeMethod(JoinPoint joinPoint){ 45 String methodName = joinPoint.getSignature().getName(); 46 List<Object> args = Arrays.asList(joinPoint.getArgs()); 47 System.out.println("The method " + methodName + " begins " + args); 48 } 49 }
2.重用切入点定义
转载于:https://www.cnblogs.com/jasonHome/p/6137493.html
[原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式相关推荐
- Java学习笔记-Day64 Spring 框架(二)
Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...
- Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习
Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...
- 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)
长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...
- 开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)
开源鸿蒙南向嵌入学习笔记--NAPI框架学习(一) 前言--系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些 ...
- motan学习笔记 五 opentracing学习入门
motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...
- Java Web 实习笔记(一)
Java web实习笔记目录导航 1. Java Web 实习笔记(一) 2.Java Web 实习笔记(二) 3.Java Web 实习笔记(三) 4.Java Web 实习笔记(四) 一.WEB ...
- 深度学习入门之PyTorch学习笔记:深度学习介绍
深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 学习笔记:强化学习与最优控制(Chapter 2)
Approximation in Value Space 学习笔记:强化学习与最优控制(Chapter 2) Approximation in Value Space 1. 综述 2. 基于Value ...
最新文章
- matlab拟合曲线后求导,高手留步:MATLAB五阶拟合函数,求导后离散化,输出结果是星号...
- poj 1753 Flip Game dfs 技巧
- tf.reverse
- elasticsearch集群配置文件详述
- qt在visual studio 2015下的使用
- day15 java接口的基础语法
- 31 天重构学习笔记9. 提取接口
- 人工势场法matlab讲解,传统人工势场法(matlab)
- Sublime Text3的安装和使用
- 图谱实战 | 开源知识图谱融合工具剖析:Dedupe与OpenEA工具实现思想、关键环节与实操分析...
- 小米商城项目实战(一)
- 外汇mt4 软件在哪里下载比较正规?
- Xampp介绍、安装过程及使用方法
- 海思系统开发——linux下挂载SD卡
- [UVA156]反片语 Ananagrams 题解(映射:map 详解)
- Python3 爬虫模板
- 【Matlab】取整函数
- 一个半路出家的‘程序员’
- 前不见古人,后不见来者,独他一人“怀才不遇”?慎用!
- Qcom_Sensor(一)--- 之 Android简单的计步器应用实现
热门文章
- ATM机为什么不能存100张?
- 人与人之间交往最重要的是什么?
- 可以扦插的花有哪些?
- 二叉树的层次遍历II
- ubuntu下使用脚本自动禁用笔记本触摸板和键盘
- [leetcode]328. Odd Even Linked List
- 关于微信小程序使用获取用户信息getUserProfile的问题:TypeError: wx.getUserProfile is not a function
- ssis导入xml_SSIS XML目标
- sql过滤代码段_如何创建和管理T-SQL代码段
- PHP+sqlsrv的分页实现