使用占位符创建自定义注释



我正在创建一些自定义注释。我需要创建某人与"占位符",因为它在Spring中使用

@Value("#{aParameter}")

或在JSF 2

@ManagedProperty(value="#{aParameter}")

我想我一定在某处有一个映射。属性或.xml文件或枚举类),但我需要知道在自定义注释接口编码这种方法。我的意思是如何在注释界面中声明占位符?当在某个地方应用注释时,如何确保其值的分配(在映射文件中)?

您不需要在注释声明中执行此操作-您需要在使用该注释的代码中执行此操作。

例如@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);
}

所以处理解析属性之类的逻辑被放在类中它实际上使用了read注释并使它们变得有用

相关内容

  • 没有找到相关文章

最新更新