我试图将一个值注入Custom Annotation,但Spring似乎没有评估。
这是我的注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnno {
String var1();
String var2();
}
这是我的Bean(它是在Spring配置文件中创建的),带有注释:
public class MyClass {
@MyCustomAnno(var1 = "${some.property.one}",
var2 = "${some.property.two}")
public void someMethod() {
// do something here
}
}
以下是我尝试使用传递给注释的值的方面:
@Aspect
public class MyAop {
@Around(value="@annotation(myCustomAnno)",argNames="myCustomAnno")
public Object aroundMethod(MyCustomAnno myCustomAnno) {
int intVar1 = Integer.parseInt(myCustomAnno.var1());
int intVar2 = Integer.parseInt(myCustomAnno.var2());
// ....
}
}
在around方法中,我收到一个NumberFormatException:对于输入字符串:$ {some.property.one}。这意味着Spring出于某种原因没有注入该值。
如果您想知道,在同一个类中我可以执行正常的@Value注释并正确注入值:
@Value("${some.property.one}")
private propertyOne; // This works
是否有可能做我想做的事情,如果可以,怎么做?
答案 0 :(得分:0)
AFAIK,自定义注释中未解析占位符。但是,您可以在Aspect本身中解决它们。
例如:
@Aspect
class MyAop implements EmbeddedValueResolverAware {
private StringValueResolver resolver;
@Around(value="@annotation(myCustomAnno)",argNames="myCustomAnno")
public void play(MyCustomAnno ann) {
System.out.println(resolver.resolveStringValue(ann.var1()));
}
@Override
public void setEmbeddedValueResolver(StringValueResolver resolver) {
this.resolver = resolver;
}
}