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/432974.shtml

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

相关文章

玩转树莓派Raspberry Pi 篇一:入门篇

前言:之前发了一篇树莓派刷OpenWrt系统的晒单,得到众多网友的关注,小编要希望分享更多DIY树莓派的经验。我玩树莓派都是比较简单的DIY,也积累了一点经验,在此分享给大家,算是抛砖引玉,希望看到大…

服务器三大类

SMP、NUMA、MPP体系结构介绍从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构 (SMP : Symmetric Multi-Processor) ,非一致存储访问结构 (NUMA : Non-Uniform Memory Access) ,以及海量…

java listeners_Java ActionListeners

我将用Java开发一个游戏,它将拥有许多听众(动作,键,鼠标等).我的问题是实现监听器的最佳方式.方法1:this.addActionListener(new ActionListener() {// Overide methods go here});方法2:创建一个新类(或多个类),它将实现ActionListener并具有不同Game C…

WINCE6补丁安装

补丁安装 1. SP1 2. R2 3. R3 4. 最新一年的12月31月补丁 补丁下载地址 https://msdn.microsoft.com/en-us/windowsembedded/dn205267

codeforces B. The Fibonacci Segment 解题报告

题目链接:http://codeforces.com/problemset/problem/365/B 题目意思:简单来说,就是要找出最长的斐波纳契长度。 解决的方法不难,但是要注意更新左区间和右区间的值,而且需要把当前求出的斐波纳契长度和之前求出的斐…

mysql 导致iis 假死_php使用MySql函数导致Apache(iis)崩溃的问题解决方案

这个问题是在Windows下配置PHP环境时发生的。具体的表现是php运行正常,但是只要一调用MySql的相关函数,Apache就会崩溃掉。环境配置方式:php以模块的方式运行在Apache下。自定义php.ini路径phpinfo()显示mysql库加载成功崩溃后在Windows的错误…

回环设备(loop-back devices)

回环设备( loopback device)允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。(当然,disk-ima…

委托类型

委托时一种特殊的类型,它用来保存方法的地址,这样我们很方便的调用方法,像变量一样传递,回调。 C中的函数指针也是保存方法的地址,但是有一点不一样的是定义委托的时候就知道了它里面可以保存什么样的方法,…

python 管道 异步读取 select_python之异步select解析

一、I/O多路复用I/O的含义:在计算机领域常说的IO包括磁盘IO和网络IO,我们所说的IO复用主要是指网络IO;在Linux中一切皆文件,因此网络IO也经常用文件描述符FD来表示。复用的含义:在通信领域中为了充分利用网络连接的物理…

C语言 文件

1. 需要了解的概念 需要理解的知识点包括:数据流、缓冲区、文件类型、文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流&#xff0…

WINCE BSP中source文件中的宏定义

在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的。这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编译和链接,告诉Nmake.exe如何编译源代码以及最后生成…

java递增_java-8 – 如何按组递增

有一个表,现在添加一个新列 – sort_num int default 0id level sort_num1 1 02 1 03 2 04 2 05 2 06 3 07 3 08 3 09 3 0现在我想设置如下的sort_num值id level sort_num1 1 12 1 23 2 14 2 25 2 36 3 17 3 28 3 39 3 4上面的Java代码实现要求是int sortNum 0;int currentLev…

解决WCF接口无法传递object参数的问题

在某些场合中,我们需要提供以object为参数的方法。不过在WCF中,由于需要序列化与反序列化,因此它要求所有WCF传递的参数类型都是已知的,无法传递object这种未知类型。即使用了KnownType来标记自定义对象,也无法调用。以…

wince中的BSP工程的相关文件介绍

一.pbcxml分析 每一个BSP都有一个工程文件&#xff0c;比如MyBSP.pbcxml&#xff0c;里面描述了BSP的信息。下面就来介绍一下BSP的pbcxml文件。 文件的大致格式应该是这样的&#xff1a; <CatalogFile …> <FileInformation ….> …. </FileInformation>…

calcite连接mysql_使用Calcite做Sql语法解析

Flink SQL中使用Calcite作为sql语法解析、校验、优化工具&#xff0c;本篇是实操篇&#xff0c;介绍一下calcite做sql语法解析使用方式。sql经过calcite解析之后&#xff0c;得到一棵抽象语法树&#xff0c;也就是我们说的AST&#xff0c;这棵语法树是由不同的节点组成&#xf…

ASP.NET Web Froms开发模式中实现程序集的延迟加载

延迟加载是一个很大的诱惑&#xff0c;可以达到一些比较好的效果&#xff0c;比如&#xff1a; 1、在实体框架中&#xff0c;由于关联数据的数量和使用时机是不确定的&#xff0c;通过延迟加载&#xff0c;仅在使用的时候去执行关联数据的查询操作&#xff0c;减少无谓的数据查…

java的国际化怎么用_Java有关国际化使用实例

1package com.commons.dormant.resources;import java.util.Locale;import java.util.ResourceBundle;/*** Commons-Resources没有提供已经发布的jar包&#xff0c;所以没有相关的实例&#xff0c;* 本例是java自带的和Resources功能相似的例子。主要是实现国际化* author chai…

jQuery之ajax的跨域获取数据

如果获取的数据文件存放在远程服务器上&#xff08;域名不同&#xff0c;也就是跨域获取数据&#xff09;&#xff0c;则需要使用jsonp类型。使用这种类型的话&#xff0c;会创建一个查询字符串参数 callback? &#xff0c;这个参数会加在请求的URL后面。服务器端应当在JSON数…

两个结构体ifconf和ifreq

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq&#xff0c;它们对于大多数人 来说都是比较陌生的&#xff0c;这里给大家一种比较简单的理解方法&#xff0c;当然只一种帮助 理解的方法&#xff0c;在描述中可能会有一些地方与真实定义有所出入&#xff0c;仅供参考. …

java判断tcp是否阻塞_connect()调用在TCP堆栈中是非阻塞的(java)是什么意思

我有一个关于TCP套接字实现的connect()调用的问题.对于connect()调用来说,非阻塞是什么意思. connect()调用通过发送syn,等待SYNACK然后发送ACK,与其他一些套接字进行三次握手.如果连接成功,connect()调用也返回true,否则返回false.如果调用是非阻塞的,那么我猜这意味着连接应该…