域名注册网站大全手机做任务的网站有哪些
web/
2025/10/5 7:01:24/
文章来源:
域名注册网站大全,手机做任务的网站有哪些,东莞市建设局,东莞网站建设基础文章目录 需求问题解决方案示例代码 需求
项目中共用了一个redis#xff0c;而项目中部分代码使用了JetCache的Cached注解。所以需要给Cached动态配置area属性值#xff0c;用来区分dev和test环境。
问题
自定义注解的属性值需要常量值#xff0c;即static final修饰而项目中部分代码使用了JetCache的Cached注解。所以需要给Cached动态配置area属性值用来区分dev和test环境。
问题
自定义注解的属性值需要常量值即static final修饰直接通过配置文件不可行。
解决方案
1、使用AOP切面拦截使用注解的方法动态修改注解的属性值。切面1。 2、注解的底层一般也有一个AOP切面。切面2。 需要确保切面1在切面2之前执行 (使用order(int)注解值越小越先执行)。
示例代码
yml配置文件
testAop:actionValue: 测试-10101908-action切面1
Component
Aspect
Slf4j
Order(1)
public class MyAspect {Value(${testAop.actionValue})private String actionValue;Before(value annotation(webLogAnnotation))public void aopTest(WebLogAnnotation webLogAnnotation) throws Throwable {InvocationHandler invocationHandler Proxy.getInvocationHandler(webLogAnnotation);Field value invocationHandler.getClass().getDeclaredField( memberValues);value.setAccessible(true);MapString,Object memberValues (MapString,Object) value.get(invocationHandler);memberValues.put(action, actionValue);log.info(MyAspect.aopTest memberValues{},memberValues);}
}切面2
Component
Aspect
Order(2)
public class WebLogAspect{Around(annotation(webLogAnnotation))public Object logAround(ProceedingJoinPoint joinPoint, WebLogAnnotation webLogAnnotation) throws Throwable {// do something......
}controller
PostMapping(/getList)
WebLogAnnotation(logType 30010051,action 通讯录-分页查询列表action,description 通讯录-分页查询列表desc)
public PageResponseMsgAddressBookVo getList(RequestBody Valid PageRequestQueryAddressBookListReq pageDto){// do something......
}经测试WebLogAspect中成功获取到MyAspect 中修改的注解参数值。如下所示 遗留问题
必须传入该参数才可以获取到修改后的值通过反射方法method.getAnnotation(WebLogAnnotation.class)获取到的是原始值。若Cached底层也是通过反射实现则修改不了。
通过反射动态修改自定义注解属性值、SpringBoot实现对自定义注解的切面、自定义注解属性动态赋值
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87225.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!