您不要在註釋聲明中這樣做 - 您可以在使用該註釋的代碼中執行此操作。
例如,@Value
聲明如下:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
public @interface Value {
/**
* The actual value expression: e.g. "#{systemProperties.myProp}".
*/
String value();
}
,如果您跟蹤如何使用它,你會看到,在org.springframework.web.bind.annotation.support.HandlerMethodInvoker
類的值是直接從註釋defaultValue = ((Value) paramAnn).value();
然後解決這樣的牽強:
if (defaultValue != null) {
args[i] = resolveDefaultValue(defaultValue);
}
...
class AnnotationMethodHandlerAdapter{
...
protected Object resolveDefaultValue(String value) {
if (beanFactory == null) {
return value;
}
String placeholdersResolved = beanFactory.resolveEmbeddedValue(value);
BeanExpressionResolver exprResolver = beanFactory.getBeanExpressionResolver();
if (exprResolver == null) {
return value;
}
return exprResolver.evaluate(placeholdersResolved, expressionContext);
}
所以邏輯以解決性能,例如放置在類 實際使用閱讀註釋,使他們有用的照顧。