在Spring中编写此代码,然后尝试使用自定义注释,该注释将从方法的参数中获取值并对其执行一些逻辑。 但这是行不通的。最终打印出我传入的String值,而不是变量的值。
示例变量名为name,其值为“ Dan”。当我传入参数时,它最终打印出“名称”而不是“丹”。 如果我在Spring中对Cacheable注释执行相同的操作,则效果很好。使用Intellij甚至基于ide的亮点,当我将其传递给@Cacheable时似乎可以识别该参数,但对于我的自定义批注则不然。请告知我在做什么错。
我的自定义注释
@CustomAnnot(key = "#key")
public Object getObj(String key) {
return null;
}
实施注释。当我期望“ Dan”时,这会错误地打印出“ #key”
@Cacheable(key = "#key")
public Object getAnotherObj(String key) {
return null;
}
传递相同表达式的示例可缓存。
@Around("@annotation(CustomAnnot)")
public Object get(ProceedingJoinPoint pjp, CustomAnnot customAnnot) throws Throwable {
String key = customAnnot.key();
System.out.println(key);
}
相信此代码不会引起任何问题。只是添加它以防万一。使用注释重定向到进行打印的Aspect类,在该类中我验证它打印错误。
ggplot(data=df57melt) +
geom_col(aes(x=as.factor(variable),
y = value,fill = as.factor(cellType),
color = ORR,
group=cellType),
position = position_dodge(),size = 2)+
scale_fill_grey()
答案 0 :(得分:0)
如果您想要的只是基于您的键的参数值,则可以执行以下操作。排除了异常处理。
@Around("@annotation(customAnnot)")
public Object get(ProceedingJoinPoint pjp, CustomAnnot customAnnot) throws Throwable {
MethodSignature signature = (MethodSignature) pjp.getStaticPart().getSignature();
List<String> paramsList = Arrays.asList(signature.getParameterNames());
List<Object> argsList = Arrays.asList(pjp.getArgs());
String key = customAnnot.key();
key = key.substring(1);
logger.info("[{}]", argsList.get(paramsList.indexOf(key)));
return key;
}
通话
test.getObj("Dan");
张照片: [丹]
答案 1 :(得分:0)
仅使用注释是不可能的。注释在编译期间被处理并嵌入到类字节码中,此时它们的存在及其属性值是固定的。注释属性值的任何处理都必须由基本Java注释API之上的一层完成。