我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的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具名参数_Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)...

    使用spring的jdbcTemplate-----使用具名参数 在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变参数的绑定,在S ...

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

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

  3. BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...

    1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...

  4. Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...

    HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...

  5. jquery中Live方法不可用,Jquery中Live方法失效

    jquery中Live方法不可用,Jquery中Live方法失效 >>>>>>>>>>>>>>>>> ...

  6. java注解获取参数_JAVA 自定义注解及参数获取 | 学步园

    package com.java.annotation; import java.lang.annotation.*; /** * Created by lw on 14-5-30. * 自定义注解 ...

  7. java自定义注解为空值_java自定义注解

    1. Java注解(Annotation) Java注解是附加在代码中的一些元信息,用于一些工具在编译. 运行时进行解析和使用,起到说明.配置的功能. 注解相关类都包含在java.lang.annot ...

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

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

  9. java注解定义常量_java自定义注解

    1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...

  10. java 注解数组初始化_Java 之 注解的定义

    一.元注解 1.元注解概述 元注解:用于描述注解的注解 2.常用的元注解 (1)@Target:描述注解能够作用的位置 Target 里面是一个 ElementType[] value() 的枚举数组 ...

最新文章

  1. axure按钮切换颜色_如何用Axure画出Web产品的列表组件:基础画法
  2. linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
  3. 【必看】Linux 或 Windows上实现端口映射
  4. [TODO]Python拾遗(三)
  5. linux列举网卡,linux下快速列出局域网中所有主机名(计算机名)的脚本
  6. php 计算每年春节日期,动态显示2019年农历春节倒计时—2019年1月21日23时45分
  7. 让你提前认识软件开发(14):程序中的算法
  8. 设计模式 经典书籍必备推荐
  9. 面向对象举例(一) —— 顶点(vertex)、边(edge)与图(graph)
  10. python扫雷脚本_Python自动扫雷实现方法
  11. php转换时间戳的函数,php时间戳的转换函数
  12. 最小二乘法求回归直线方程的详细推导过程
  13. Prometheus(监控报警系统) 的学习笔记
  14. See system logs and ‘systemctl status docker.service‘ for details
  15. 【DockerCE】Docker-CE 20.10.13正式版发布
  16. 在word中添加公式并对齐
  17. centos7解决hadoop2.6.4多次格式化导致的slave节点datanode无法启动的问题
  18. Keras预测股票走势
  19. idea中Toggle Offline Mode是什么意思
  20. 嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器B、累加器A和程序状态字PSW)

热门文章

  1. 计算机三级信息安全技术考什么2019,2019计算机三级信息安全技术精品练习8
  2. php试卷A高质量含答案,php试卷A高质量含答案
  3. 台达b3伺服modbus通讯_【数控系统】台达伺服压机控制灵活 精准压合满足各种工序需求...
  4. Java ObjectInputStream readLong()方法(带示例)
  5. 如何使用两个堆栈实现队列_使用两个队列实现堆栈
  6. 五、规则组织的衍生组织——纬山形组织数学模型的建立
  7. 一、织物组织相关基本概念
  8. js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL
  9. bs架构 erp 进销存_从依赖经验到用柔性ERP,企业少走了多少弯路?
  10. windows系统下的云服务器部署tomcat