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)

通过该地址下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka的精髓全写这本“限量笔记”里了

前言 大厂面试真题向来是求职者的最佳练兵场,华为在Java开发工程师招聘中有哪些技术性考察和倾向?那今天咱就给大家分享一下近期的华为5面面经! 注:以下所分享的华为面试问题,相关的答案我也整理出来了,且…

gcc是java的什么意思_为什么gcc支持Java而不是C#

我已经seen this question了,我想知道是否有任何技术理由可以证明gcc支持Java但不支持C#.如果我理解,Java也是一种解释性语言.如果Mono提供C#编译器和CIL的实现,为什么不能创建一个将C#转换为IL然后静态编译的gcc c#编译器?解决方法:如果编译器工具链不支持特定语言…

MongoDB数据分布不均的解决方案

前言 算法血拼:Google百度Alibaba字节Tencent网易360拼夕夕美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚石? 恰好,我这两天花了点时间,整理了些各大厂(G…

Mybatis-plus常用API全套教程

前言 前两天,我收到了蚂蚁金服的offer,从朋友的内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了offer。 正文 下文中截图来源于朋友一个pdf版本的面经,…

我的世界手动选择java_如何选中路径-我的世界怎么选择java路?我的世界怎么选择java路径 爱问知识人...

2014-06-03 11:26:47首先确定你安装了Java,如没有自行去官网下载最近版本 如果已安装,打开启动器,一般的启动器都有设置选项,在设置里选择正确的Java路径或者让启动器自行搜索 设置完毕后启动游戏~全部2014-06-03 11:26:472014-06…

Mycat和Mysql搭建高可用企业数据库集群

个人背景 如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努…

java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...

String sql”select * from reg where username”user”‘ and pass”pwd”‘”;这是一个非常糟糕的做法.这种方法要求用户名和密码都通过请求传递普通香草.而且,你有一个SQL注入攻击漏洞.利用会话,在JSP / Servlet中你有HttpSession.实际上也没有必要在使用过滤器的每个请求上…

MySQL+Tomcat+JVM,看完还怕面试官

前言 我朋友也是个写了四年Java代码的程序员,跟女友已经恋爱多年,最近突然结婚了。 他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。 我聊天时打趣他&#xff1…

java因子分析_因子分析(Factor Analysis)

1 问题之前我们考虑的训练数据中样例的个数m都远远大于其特征个数n&#xff0c;这样不管是进行回归、聚类等都没有太大的问题。然而当训练样例个数m太小&#xff0c;甚至m<多元高斯分布的参数估计公式如下&#xff1a;分别是求mean和协方差的公式&#xff0c;表示样例&#…

MySQL+多线程+Redis+算法+网络

开头 我们面试的时候 &#xff0c;经常会被问这种到问题:Spring中bean的循环依赖怎么解决&#xff1f; Spring中bean的加载过程&#xff1f; spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们&#xff0c;不知道从哪里下手&#xff0c;今天举例分析大厂的一…

python 函数进度条怎么_python输出结果刷新及进度条的实现操作

print函数python输出主要使用print函数&#xff0c;print函数介绍&#xff1a;print(*objects, sep" ", end"", filesys.stdout, flushFalse)*objects表示要打印的值&#xff0c;表示多个无名参数或需要打印的值&#xff1b;sep" "&#xff0c;对…

MySQL优化原理分析及优化方案总结

前言 今天中午收到我司安全部发了一封邮件&#xff1a;Jackson存在安全漏洞。查了一下&#xff0c;这件事并不算很新鲜了&#xff08;已经过了5天的样子&#xff09;&#xff0c;本文来聊聊吧。 说起来还蛮戏剧化&#xff1a;阿里云向Jackson官方提交了一个Jackson序列化安全…

MySQL千万数据量深分页优化

前言 提到MySQL的事务&#xff0c;我相信对MySQL有了解的同学都能聊上几句&#xff0c;无论是面试求职&#xff0c;还是日常开发&#xff0c;MySQL的事务都跟我们息息相关。 而事务的ACID&#xff08;即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durabili…

Mysql和Redis数据同步该怎么做

前言 算法血拼&#xff1a;Google百度Alibaba字节Tencent网易360拼夕夕美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚石&#xff1f; 恰好&#xff0c;我这两天花了点时间&#xff0c;整理了些各大厂&#xff08;G…

python字符串是用双引号括起来的_用python连接字符串列表并用引号将每个字符串括起来...

您也可以执行一个format调用>>> words [hello, world, you, look, nice]>>> "{0}".format(", ".join(words))"hello", "world", "you", "look", "nice"更新&#xff1a;一些基准测试…

java源代码保存在扩展名为,看完跪了

正文 在实际的工作项目中&#xff0c; 缓存成为高并发、高性能架构的关键组件 &#xff0c;那么Redis为什么可以作为缓存使用呢&#xff1f;首先可以作为缓存的两个主要特征&#xff1a; 在分层系统中处于内存/CPU具有访问性能良好&#xff0c;缓存数据饱和&#xff0c;有良好…

java源码文件丢恢复需要多少钱,上岸蚂蚁金服!

京东Java研发岗一面&#xff08;基础面&#xff0c;约1小时&#xff09; 自我介绍&#xff0c;主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 Autowired的实现原理 Bean的默认作用范围是什么&#xff1f;其他的作用范围&#xff1f; 索引是什么概念有什么作用&am…

php 静态方法特点,浅析php静态方法与非静态方法的用法区别

在php编程中&#xff0c;static关键字声明一个属性或方法是和类相关的&#xff0c;而不是和类的某个特定的实例相关&#xff0c;因此&#xff0c;这类属性或方法也称为“类属性”或“类方法”如果访问控制权限允许&#xff0c;可不必创建该类对象而直接使用类名加两个冒号“::”…

java特性多态,90%的人看完都说好

01.第一份资料是图解网络 根据读者阅读偏好不同&#xff0c;共出了两个版本风格的 PDF&#xff0c;分别是亮白版本和暗黑版本。 02.第二份资料是计算机的相关知识 看完能让你对计算机有一个基础的了解和入门&#xff0c;是培养你 内核 的基础&#xff0c;我们看下目录大纲 基…

php session 释放,php中删除Session和销毁Session的方法

删除某个session值可以使用PHP的unset函数&#xff0c;删除后就会从全局变量$_SESSION中去除&#xff0c;无法访问。session_start();$_SESSION[name] jobs;unset($_SESSION[name]);echo $_SESSION[name]; //提示name不存在如果要删除所有的session&#xff0c;可以使用sessio…