我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的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) 

通过该地址下载

https://github.com/liuxg2013/AnnotationResolver.git

转载于:https://www.cnblogs.com/pejsidney/p/9205323.html

java在注解中绑定方法参数的解决方案相关推荐

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

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

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

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

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

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

  4. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  5. java中的方法参数

    java中的方法参数 首先回顾一下程序设计语言中有关参数传递给方法的专业术语. 按值调用:表示方法接收的是调用者提供的值. 按引用调用:表示方法接收的是调用者提供的变量地址. java中总是采用按值调 ...

  6. java:axis2环境下获取方法参数名的另一种方法

    java本身提供的方法不能获取方法的参数名的,只能获取每个参数的类型 比如: public String concatString(String param1,String param2){retur ...

  7. matplotlib.pyplot中add_subplot方法参数111的含义

    >引自:http://www.codeweblog.com/matplotlib-pyplot中add_subplot方法参数111的含义/

  8. java empty isempty_Java中isEmpty方法如何使用?

    展开全部 isEmpty()方法有很多类都有,对于String类,62616964757a686964616fe4b893e5b19e31333264656134它是Java 6.0引入的, 当且仅当 ...

  9. Java异常打印输出中常见方法的分析

    Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置.但是一般在我们的项目中,由于经验阅历等多方面的原因,依然有若干的童鞋在代码中没有正确的使用异 ...

最新文章

  1. 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案
  2. 查看linux4222端口,linux 内核 ALIGN 含义
  3. w7计算机不显示移动硬盘,win7系统不显示移动硬盘怎么回事_win7移动硬盘在电脑上显示不出来如何处理-win7之家...
  4. 谷歌新玩具Vision Kit,带你DIY一个能识别千种物体的AI摄像头
  5. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_13_常用的函数式接口_Predicate接口中的默认方法and...
  6. 带权图上的三个问题--最短路问题、中国邮递员问题与货郎担问题
  7. 带管理职位面试中遇到的常见经典问题的回答
  8. Ubuntu 设置桥接网络
  9. [No0000C7]windows 10桌面切换快捷键,win10
  10. 计算机专业实践体会,计算机专业毕业实习心得体会
  11. 你们怎么都有自己的聊天机器人?给我也来一个!
  12. 不懂优雅停机,搞挂了线上服务,咋办?
  13. SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃
  14. 苹果平替笔哪个牌子好?苹果平替笔推荐
  15. 传世引擎 A.F.T.Engine 完美破解步骤纪要
  16. 探索数字化新模式,北京建工三建率先启用法大大电子合同
  17. 4.GitHub译文之社区
  18. PHP签名生成的通用步骤
  19. 树莓派4B使用方法及硬件推荐
  20. Servlet 中文乱码问题及解决方案剖析

热门文章

  1. 当前几个主要的Lucene中文分词器的比较
  2. 【python】简单实现一个模板引擎
  3. js通过classname来获取元素
  4. 深入Mysql,SqlServer,Oracle主键自动增长的设置详解
  5. LeetCode-Sort List 链表排序
  6. 买卖股票的最佳时机|||
  7. golang中的strings.Compare
  8. 网址http格式的拆分
  9. 设计模式:模板方法(Template Method Pattern)
  10. spring17:Bean的生命始末标签@PostConstruct,@PreDestroy和改变作用范围的@Scope标签