@Aspect @around 多个参数
2019独角兽企业重金招聘Python工程师标准>>>
直接上代码:
@Aspect
@Component
public class LogErrorAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(LogErrorAspect.class);
private static final String NB = "nb";
@Pointcut(value = "within(com.aop.service.order..*) && @annotation(com.aop.intf.dto.order.EasyValid)")
public void logErrorPointCut(){
}
/*
异常拦截加参数e
@AfterThrowing(value="within(com.aop.ysma..*)", throwing="e")
可行方案:能拦截到service层代码,但是如此书写却是拦截不到controller的
@Around("within(com.aop.service.order..*) && @annotation(easyValid)")
可行方案:能拦截到service和controller层代码 两个参数
@Around(value = "execution(@com.aop.service.order * *(..)) && @annotation(easyValid)")
可行方案:能拦截到service和controller层代码
@Around("within(com.ysma.aop..*) && @annotation(com.ysma.aop.intf.base.db.ReadOnly)")
可行方案
@Around("@annotation(com.aop.service.order.EasyValid)")
public Object aroundSimple(ProceedingJoinPoint pj, EasyValid easyValid) throws Throwable {
LOGGER.debug("diy aroundSimple =================");
return pj.proceed();
}*/
/**不可行方案
@Around(value = "logErrorPointCut() && args(com.aop.intf.dto.order.EasyValid)", argNames = "pj, easyValid")
*/
@Around(value = "logErrorPointCut() && args(easyValid)", argNames = "pj, easyValid")
public Object around(ProceedingJoinPoint pj, EasyValid easyValid) throws Throwable {
/*@Around("logErrorPointCut()")
public Object around(ProceedingJoinPoint pj) throws Throwable {*/
//pj.getClass().getAnnotation(EasyValid.class);
LOGGER.debug("diy operation =================");
if(easyValid == null){
LOGGER.debug("easyValid is null =================");
return pj.proceed();
}
boolean nb = NB.equals(easyValid.source());
return pj.proceed();
}
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EasyValid {
/**
* b/g 必须输入
* @return
*/
String source();
/**
* 入参 必须输入
* @return
*/
String operatiton() default "";
}
注:被注解的方法须是public方法 protect和private方法虽不会报错却也不会生效
那么问题来了:采用不可行方案将pointcut和advice拆分开来我的切面就拦截不到标记了annotation的服务;
采用可行方案将pointcut和advice不拆分,就能正常获取参数并拦截标记了annotation的服务;
备注:1、我跟踪了一下spring的源码,发现采用不可行的方案时,spring只会取其中的easyValid参数并匹配并且成功匹配到了也能将对应的标记了@EasyValid的服务作为cancaditate加入候选者列表等待匹配调用。
但是临门一脚的时候就跳过了我的LogErrorAspect切面了。
2、我将pj做为参数放入到args里面也会报错。说没有匹配类型的参数。是因为ProceedingJoinPoint是JoinPoint的子类的缘故么?貌似这么理解也不太科学
猜想:是不是代理类proxy在invocation的时候发现参数数目不匹配跳过了不可行方案的方法?
3、之前有看过文章说 controller并不在spring管理范围内,service在spring管理范围内。 所以service走spring代理,aop切面都能切中,但是controller就切不中
此处提供了另类的方式切中controller的aop方式
求教:pointcut和advice拆分的情况下如何定义除pj以外的参数
转载于:https://my.oschina.net/ysma1987/blog/597601
@Aspect @around 多个参数相关推荐
- 用python绘制漂亮的图形-用python绘制图形的实例详解
1.环境系统:windows10 python版本:python3.6.1 使用的库:matplotlib,numpy 2.numpy库产生随机数几种方法import numpy as npnumpy ...
- Spring Aop之Advisor解析
2019独角兽企业重金招聘Python工程师标准>>> 在上文Spring Aop之Target Source详解中,我们讲解了Spring是如何通过封装Target Source来 ...
- threejs相机和渲染器
渲染器 渲染器其实代表的是canvas标签. 渲染器的类型 WebGLRender 使用WebGL来渲染图形,速度较快,但是有些机器不支持WebGL. CanvasRender 使用canvas2d来 ...
- matplotlib入门基础(五)轴坐标范围 轴刻度比例 轴刻度
这篇文章同样以面向对象风格为主,介绍设置轴坐标范围.轴刻度比例.轴刻度(xtick,ytick)的方法. 这篇文章分以下部分来介绍: 1. 设置轴坐标范围 2. 设置轴刻度比例 3. 设置轴刻度 1. ...
- 深度学习Spring5底层原理(黑马学习随笔)
学习随笔简介 跟随着黑马满老师的<黑马程序员Spring视频教程,全面深度讲解spring5底层原理>学习,视频教程地址:黑马程序员Spring视频教程,全面深度讲解spring5底层原理 ...
- FFMpeg4.0相关结构体和函数
文章目录 相关指令 相关结构体 av_register_all() 已废弃无需添加 avformat_network_init() 初始化网络封装库 AVFormatContext结构体 AVDict ...
- 深度语义理解在剧本角色情感分析中的探索与应用
深度语义理解在剧本角色情感分析中的探索与应用 1.背景 剧本分析是内容生产链条的第一环,因此,我们结合专家经验知识,大数据与自然语言处理计数来帮助业务部门快速分析和评估剧本.评估体系中涉及到了大量关于 ...
- 六大数据统计图——Python的数据可视化
一直以来,数据可视化就是一个处于不断演变之中的概念,其边界在不断地扩大:因而,最好是对其加以宽泛的定义.数据可视化指的是技术上较为高级的技术方法,而这些技术方法允许利用图形.图像处理.计算机视觉以及用 ...
- FFmpeg 常用选项功能说明(视频专家地址)
简介与其他资料: - http://www.5i01.cn/topicdetail.php?f=510&t=3734550 FFmpeg 常用选项功能说明 由于 FFmpe 功能太庞大了, ...
最新文章
- 实验02 Linux文件和目录管理
- 简单描述DDL、DCL、DML
- 共享内存+Shellcode实现跨进程调用3环函数
- anemometer mysql_MySQL慢日志简介及Anemometer工具介绍 | | For DBA
- sonar的安装以及使用
- [Silverlight]TextBlock控件全攻略
- Repeater,DataList,DataGrid 【转】
- Do not mutate vuex store state outside mutation handlers.
- 华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动
- python生成多个随机数列表_在python中生成1到6之间的6个随机数的列表
- 中国内窥镜光学物镜市场趋势报告、技术动态创新及市场预测
- 凸优化第八章几何问题 8.5中心
- ISO 17799 /27001标准简介
- 《Nature》论文插图的Matlab复刻第4期—单组多色柱状图(Part2-82)
- 三极管放大电路驱动蜂鸣器
- 闽江学院计算机毕设,闽江学院软件学院关于2017届毕业论文答辩有关事项的通知...
- 驾照科目一/科目四 知识点
- 谷粒商城简介(1~5集)
- python 爱心文字墙_博客园墙裂推荐!从未见过如些清新脱俗的完整Python+requests接口自动化测试框架搭建文章!...
- 光纤中的多种光学模式芯径_光纤激光器的重要参数BPP(M2)