我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的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在注解中绑定方法参数的解决方案相关推荐

  1. java 注解 方法 参数_java在注解中绑定方法参数的解决方案

    我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...

  2. plsa的java实现_java在注解中绑定方法参数的解决方案

    我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...

  3. java list 内存释放_java集合ArrayList中clear方法内存释放分析

    最近在看ArrayList源码的时候看到了ArrayList的clear方法,源码如下: public void clear() { modCount++; // clear to let GC do ...

  4. 从前台页面取参数到sql的like中比较时参数的预处理

    //从前台页面取参数到sql的like中比较时参数的预处理 this.keytxt.Text.Trim().Replace("'", "''").Replace ...

  5. java注释的简单_Java简单注解

    3)按照规定使用注解,但是并不将它保留到编译后的类文件中 import java.util.ArrayList; import java.util.Date; import java.util.Lis ...

  6. java privilege的用法_java反射--注解的定义与运用以及权限拦截

    自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...

  7. java dll is多线程_Java实现多线程--四种方法

    1 /** 2 * 第一种3 * 继承thread类 重写 run方法4 * 调用start方法,启动线程5 *@authorsunshine6 */ 7 8 /** 9 * 第二种实现runnabl ...

  8. java数组 js数组的长度_js中split()方法得到的数组长度问题

    定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separator,howmany) 参数 描述 separator 必需.字符串或正则 ...

  9. java语言sql接口_java.sql包中的类和接口及其使用

    java.sql包提供使用Java编程语言访问并处理存储在数据源中数据的API,可以动态地安装不同驱动程序来访问不同数据源. 下面,详解java.sql包中包含的常用的接口和类 1.DriverMan ...

最新文章

  1. ncnn tensorrt
  2. leetcode 105. 从前序与中序遍历序列构造二叉树
  3. 如何美化linux终端输出
  4. SQL、LINQ、Lambda 三种用法
  5. linux应用程序是什么,linux下c开发了一个应用程序,它的扩展名是什么?
  6. 织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...
  7. python在线作业_南开大学20春学期《Python编程基础》在线作业参考答案
  8. bfs+优先队列(hdu1242)
  9. Android编程之DialogFragment源码详解(一)
  10. [转载] python内置函数 compile()
  11. Python Excel到JSON的转换
  12. 网络嵌入之STNE model
  13. mysql资源估算_关于数据库查询要耗费的服务器资源估算!高手进~
  14. 两个平面的位置关系和判定方程组解_精品获奖教案 1.2.4平面与平面的位置关系(2)教案 苏教版必修2...
  15. {ResponseInfo:com.qiniu.http.Response@144f47b,status:401, reqId:uwcAAKdVRC2bnUoV, xlog:UP/401, xvia:
  16. 使用lettuce和redisTemplate操作redis cluster踩坑日记
  17. 论文速递-ANALYSIS OF VISUAL REASONING ON ONE-STAGE OBJECT DETECTION
  18. Python实现psf2otf
  19. 如何提取视频中的音频,不需要软件,在线就能做到
  20. 后端生成PDF一些工具

热门文章

  1. 实验13 编写、应用中断
  2. 小程序·云开发实战 - 校园约拍小程序
  3. 38. 统计一个整数的二进制表示中bit为1的个数
  4. VS生成Cordova for Android应用之Gradle
  5. java判断字符串是否为数字或中文或字母
  6. Linux Linux程序练习七
  7. 基于visual Studio2013解决面试题之0902内存拷贝
  8. Python基础-作用域和命名空间(Scope and Namespace)
  9. Oracle Database Appliance
  10. [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]