java 方法参数绑定_java在注解中绑定方法参数的解决方案
发布日期:2021-06-24 19:27:57 浏览次数:9 分类:技术文章

本文共 1737 字,大约阅读时间需要 5 分钟。

我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的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://blog.csdn.net/weixin_34262786/article/details/114226931 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unix java安装在哪里了_Linux下JDK应该安装在哪个位置
下一篇:java session类_普通java类得到request、session等 | 学步园

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月02日 11时56分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【面试篇】数据结构-哈希表 2021-06-29
【Leetcode刷题篇】leetcode88 合并两个有序数组 2021-06-29
【Leetcode刷题篇】剑指offer51 数组中的逆序对 2021-06-29
【Leetcode刷题篇】剑指offer55-平衡二叉树 2021-06-29
【Leetcode刷题篇】leetcode98 判断一棵树是否为二叉搜索树 2019-04-26
Java中arraylist和数组的相互转换 2019-04-26
【Leetcode刷题篇 】leetcode147 对链表进行插入排序 2019-04-26
【Leetcode刷题篇】leetcode148 排序链表 2019-04-26
【面试篇】Java中String、StringBuilder与StringBuffer的区别? 2019-04-26
【面试篇】Java对象的hashCode()相同,equals()一定为true吗? 2019-04-26
【面试篇】Java中static和final关键字的作用是什么? 2019-04-26
【面试篇】Java中接口和抽象类的区别是什么? 2019-04-26
【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流 2019-04-26
【Java网络编程与IO流】Java中BIO、NIO、AIO的区别是什么? 2019-04-26
【Leetcode刷题篇】leetcode136 只出现一次的数字 2019-04-26
spring boot整合thymeleaf,支持JSP和HTML页面开发 2019-04-26
【Java网络编程与IO流】Spring boot整合SSE实现服务器实时推送流信息 2019-04-26
【Java网络编程与IO流】SpringBoot + WebSocket + Netty实现实时的服务器消息推送 2019-04-26
【Leetcode刷题篇】leetcode141 环形链表II 2019-04-26
【Leetcode刷题篇】leetcode160 相交链表 2019-04-26