java 方法参数绑定_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 注解 方法 参数_java在注解中绑定方法参数的解决方案
我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...
- plsa的java实现_java在注解中绑定方法参数的解决方案
我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...
- java list 内存释放_java集合ArrayList中clear方法内存释放分析
最近在看ArrayList源码的时候看到了ArrayList的clear方法,源码如下: public void clear() { modCount++; // clear to let GC do ...
- 从前台页面取参数到sql的like中比较时参数的预处理
//从前台页面取参数到sql的like中比较时参数的预处理 this.keytxt.Text.Trim().Replace("'", "''").Replace ...
- java注释的简单_Java简单注解
3)按照规定使用注解,但是并不将它保留到编译后的类文件中 import java.util.ArrayList; import java.util.Date; import java.util.Lis ...
- java privilege的用法_java反射--注解的定义与运用以及权限拦截
自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...
- java dll is多线程_Java实现多线程--四种方法
1 /** 2 * 第一种3 * 继承thread类 重写 run方法4 * 调用start方法,启动线程5 *@authorsunshine6 */ 7 8 /** 9 * 第二种实现runnabl ...
- java数组 js数组的长度_js中split()方法得到的数组长度问题
定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separator,howmany) 参数 描述 separator 必需.字符串或正则 ...
- java语言sql接口_java.sql包中的类和接口及其使用
java.sql包提供使用Java编程语言访问并处理存储在数据源中数据的API,可以动态地安装不同驱动程序来访问不同数据源. 下面,详解java.sql包中包含的常用的接口和类 1.DriverMan ...
最新文章
- ncnn tensorrt
- leetcode 105. 从前序与中序遍历序列构造二叉树
- 如何美化linux终端输出
- SQL、LINQ、Lambda 三种用法
- linux应用程序是什么,linux下c开发了一个应用程序,它的扩展名是什么?
- 织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...
- python在线作业_南开大学20春学期《Python编程基础》在线作业参考答案
- bfs+优先队列(hdu1242)
- Android编程之DialogFragment源码详解(一)
- [转载] python内置函数 compile()
- Python Excel到JSON的转换
- 网络嵌入之STNE model
- mysql资源估算_关于数据库查询要耗费的服务器资源估算!高手进~
- 两个平面的位置关系和判定方程组解_精品获奖教案 1.2.4平面与平面的位置关系(2)教案 苏教版必修2...
- {ResponseInfo:com.qiniu.http.Response@144f47b,status:401, reqId:uwcAAKdVRC2bnUoV, xlog:UP/401, xvia:
- 使用lettuce和redisTemplate操作redis cluster踩坑日记
- 论文速递-ANALYSIS OF VISUAL REASONING ON ONE-STAGE OBJECT DETECTION
- Python实现psf2otf
- 如何提取视频中的音频,不需要软件,在线就能做到
- 后端生成PDF一些工具
热门文章
- 实验13 编写、应用中断
- 小程序·云开发实战 - 校园约拍小程序
- 38. 统计一个整数的二进制表示中bit为1的个数
- VS生成Cordova for Android应用之Gradle
- java判断字符串是否为数字或中文或字母
- Linux Linux程序练习七
- 基于visual Studio2013解决面试题之0902内存拷贝
- Python基础-作用域和命名空间(Scope and Namespace)
- Oracle Database Appliance
- [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]