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具名参数_Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)...
使用spring的jdbcTemplate-----使用具名参数 在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变参数的绑定,在S ...
- java list 内存释放_java集合ArrayList中clear方法内存释放分析
最近在看ArrayList源码的时候看到了ArrayList的clear方法,源码如下: public void clear() { modCount++; // clear to let GC do ...
- BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...
1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...
- Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...
HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...
- jquery中Live方法不可用,Jquery中Live方法失效
jquery中Live方法不可用,Jquery中Live方法失效 >>>>>>>>>>>>>>>>> ...
- java注解获取参数_JAVA 自定义注解及参数获取 | 学步园
package com.java.annotation; import java.lang.annotation.*; /** * Created by lw on 14-5-30. * 自定义注解 ...
- java自定义注解为空值_java自定义注解
1. Java注解(Annotation) Java注解是附加在代码中的一些元信息,用于一些工具在编译. 运行时进行解析和使用,起到说明.配置的功能. 注解相关类都包含在java.lang.annot ...
- java privilege的用法_java反射--注解的定义与运用以及权限拦截
自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...
- java注解定义常量_java自定义注解
1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...
- java 注解数组初始化_Java 之 注解的定义
一.元注解 1.元注解概述 元注解:用于描述注解的注解 2.常用的元注解 (1)@Target:描述注解能够作用的位置 Target 里面是一个 ElementType[] value() 的枚举数组 ...
最新文章
- axure按钮切换颜色_如何用Axure画出Web产品的列表组件:基础画法
- linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
- 【必看】Linux 或 Windows上实现端口映射
- [TODO]Python拾遗(三)
- linux列举网卡,linux下快速列出局域网中所有主机名(计算机名)的脚本
- php 计算每年春节日期,动态显示2019年农历春节倒计时—2019年1月21日23时45分
- 让你提前认识软件开发(14):程序中的算法
- 设计模式 经典书籍必备推荐
- 面向对象举例(一) —— 顶点(vertex)、边(edge)与图(graph)
- python扫雷脚本_Python自动扫雷实现方法
- php转换时间戳的函数,php时间戳的转换函数
- 最小二乘法求回归直线方程的详细推导过程
- Prometheus(监控报警系统) 的学习笔记
- See system logs and ‘systemctl status docker.service‘ for details
- 【DockerCE】Docker-CE 20.10.13正式版发布
- 在word中添加公式并对齐
- centos7解决hadoop2.6.4多次格式化导致的slave节点datanode无法启动的问题
- Keras预测股票走势
- idea中Toggle Offline Mode是什么意思
- 嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器B、累加器A和程序状态字PSW)
热门文章
- 计算机三级信息安全技术考什么2019,2019计算机三级信息安全技术精品练习8
- php试卷A高质量含答案,php试卷A高质量含答案
- 台达b3伺服modbus通讯_【数控系统】台达伺服压机控制灵活 精准压合满足各种工序需求...
- Java ObjectInputStream readLong()方法(带示例)
- 如何使用两个堆栈实现队列_使用两个队列实现堆栈
- 五、规则组织的衍生组织——纬山形组织数学模型的建立
- 一、织物组织相关基本概念
- js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL
- bs架构 erp 进销存_从依赖经验到用柔性ERP,企业少走了多少弯路?
- windows系统下的云服务器部署tomcat