http://blog.csdn.net/shaobo7705601/article/details/77838496
注解式日志,我按你的想法写了个实现,你看下,希望给个采纳
看了下楼上有个叫tangcai的那个代码,着实费劲,杀鸡焉用牛刀啊,有个很巧妙的方法了解一下?
/**
* 设置注解中的字段值
*
* @param annotation 要修改的注解实例
* @param fieldName 要修改的注解字段名
* @param value 要设置的值
*/
public static void setAnnotationValue(Annotation annotation, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException {
InvocationHandler handler = Proxy.getInvocationHandler(annotation);
Field hField = handler.getClass().getDeclaredField("memberValues");
hField.setAccessible(true);
Map memberValues = (Map) hField.get(handler);
memberValues.put(fieldName, value);
}
几行代码就搞定的事情,没必要那么麻烦
不知道能不能做到,没试过,顶一下
不知道能不能做到,没试过,顶一下
我感觉不太现实啊!因为第一步从mapping这里出发就需要先知道要发给谁,可是你要是想让里面的value的值随着传来的数据变化而变化说真的不现实,因为这个进程不论怎么走肯定mapping先
,而且你的info是多变的,你要对应多少个不同的页面?这本身就有点不现实
可以,但是你方法体内部需要写调用该log注解的方法。
搞了两个多小时,,,这是测试案例(给个采纳呗)
链接: https://pan.baidu.com/s/1dEJsyRZ 密码: wcpi
长见识了 弄出来了可以分享一下
【追加】早上做的那个有个BUG,,更新了,,如下
链接: https://pan.baidu.com/s/1eRSdQ6I 密码: jq57
【原理】
【1】利用JVM动态加载机制,,我动态生成一个新的class,,和原来一样(仅动态修改注解内容)
【2】然后把你需要注入的内容,通过反射动态注入到注解中,生成一个新的class(官方提供的反射不是很给力,在此使用【javassist】)
【3】有了新生成了一个需要的class,,就好办了,,该干嘛干嘛,,无论是Spring配置,还是代码中classForName,,都不是问题。
本人亲测,截图如上,,,有问题可追问,,代码知识Demo并未做优化(意思到了)