java在注解中绑定方法参数的解决方案
我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成功。
这里最好的技术就是spring aop + annotation,首先我来定义个注解类
/**
* 参数命名好麻烦,我就随便了,只是演示下用法
* @author liuxg
* @date 2016年4月13日 上午7:53:52
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Logger {
String param1() default "";
String param2() default "" ;
String param3() default "" ;
String param4() default "" ;
}
``
然后我们在controller中定义一个方法,即用户具体调用的保存或者更新的方法
@RequestMapping("/mvc24")
@Logger(param1 = "#{task.project.projectName}",param2 = "#{task.taskName}",param3 = "#{name}",param4 = "常量")
public void mvc24(Task task ,String name){
//...
}
在这里我们就可以把参数中的task或者name的相关信息绑定到注解类中
然后我们再定义一个切面,我们就可以动态的获取和处理注解类的一些信息了
/**
* 日志切面
* @author liuxg
* @date 2015年10月13日 下午5:55:44
*/
@Component
@Aspect
public class LoggerAspect {
@Around("@annotation(com.liuxg.logger.annotation.Logger)")
public Object around(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
Method method = methodSignature.getMethod();
Logger logger = (Logger) method.getAnnotation(Logger.class);
Object value1 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
Object value2 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
Object value3 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
Object value4 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
return null ;
}
}
AnnotationResolver是我这边写的一个解析注解类语法的一个解析器,利用该解析器,可以把注解类中这样子的语法直接解析#{方法变量名}
该解析器只有唯一的一个方法
/**
* 解析注解上的值
* @param joinPoint 切面类,直接在aop里面获取,参考上面的例子
* @param str 需要解析的字符串
* @return
*/
public Object resolver(JoinPoint joinPoint, String str)
通过该地址下载
java在注解中绑定方法参数的解决方案的更多相关文章
- Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)
Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ...
- 【转】Ajax中send方法参数的使用(get/post)
Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : ...
- Java中main方法参数String[ ] args的使用。
我们刚开始学习java时都会被要求记住主方法(main)的写法,就像这样: public static void main(String[] args){ } public static void m ...
- 在 Java 应用程序中绑定 Bean 和数据
本指南介绍了 NetBeans IDE 对 Java 应用程序中 Bean 绑定和数据绑定的支持. 要学完本教程,您需要具备以下软件和资源. 软件或资源 要求的版本 NetBeans IDE 版本 7 ...
- JQuery中$.ajax()方法参数详解 及 async属性说明
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- jQuery中$.ajax()方法参数解析
本文实例为大家讲解了jQuery $.ajax()方法参数,供大家参考,具体内容如下 $.ajax({ url:'test.do', data:{id:123,name:'xiaoming'}, ty ...
- idea中查看方法参数;查看类、方法、属性注释
Ctrl+P:查看方法参数Ctrl+Q:查看类.方法.属性注释
- Java 实现word 中写入文字图片的解决方案
JAVA生成WORD文件的方法目前有以下两种方式: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案; 一种是poi但是他的excel处理很程序 ...
随机推荐
- cache和buffer区别
Cache: 一般用于读缓存,用于将频繁读取的内容放入缓存,下次在读取相同的内容,直接从缓存冲读取,提高读取性能,缓存可以有多级. Buffer:一般用于写缓存,用于解决不同介质直接存储速度的不同, ...
- 多名历年高考状元最终选择做中国顶尖黑客 - imsoft.cnblogs
原标题:揭秘中国顶尖黑客:二分之一是历年高考[微博]状元 “二分之一是各地的历年高考状元,二分之一是数学专业,二分之一来自微软.” Keen这样的团队是坚决与黑产划清界限的,这也是圈内的“道德洁癖”, ...
- 猎豹免费WiFi-随身WiFi共享热点,永久免费的无线路由器 - imsoft.cnblogs
- CTF之常见的两种关于word的信息隐藏技术
一.利用word本身自带的文字隐藏功能 1.在word中输入文字 2.选中文字,单击右键,选择字体选项 3.单击字体选项后,单击隐藏,确定 查找隐藏信息 1.单击左上角WPS文字后,选择选项按钮单击 ...
- 表单添加缩略图及截图js代码
此为表单提交是上传截图的代码,待优化: // 添加小程序图片 function addAvatar(obj){ var file = obj.files[0]; limit($('.avatar_bo ...
- 修改oracle系统参数spfile导致数据库无法启动解决
错误示范: SQL> alter system set nls_date_format='yyyy-mm-dd 24hh:mi:ss' scope=spfile;System altered.我 ...
- 使用crypto-js的md5加密
官方地址:https://github.com/brix/crypto-js md5加密代码: let CryptoJS = require('crypto-js') let yxcsigns = C ...
- php设计模式:单例模式
前些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要 ...
- Ionic 安装最新版本错误
更新Ionic版本时 npm i -g ionic@latest 出现如下错误 npm ERR! Unexpected end of input at 1:14782 如下图 解决方法 使用如下命令: ...
- URL中的hash(井号)
1.#的含义 #代表网页中的一个位置,其右边的字符,就是该位置的标识符.比如 http://www.example.com/index.html#print 就是代表index.html中的print ...