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

Posted

技术标签:

【中文标题】使用占位符创建自定义注释?【英文标题】:Creating custom annotations with place-holder? 【发布时间】:2013-05-12 21:47:57 【问题描述】:

我正在创建一些自定义注释。我需要创建带有“占位符”的人,因为它在 Spring 中使用

@Value("#aParameter")

或在 JSF 2 中

@ManagedProperty(value="#aParameter")

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

提前致谢。

【问题讨论】:

【参考方案1】:

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

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

因此,负责解析属性等的逻辑被放置在类中 实际使用读取注释并使其有用。

【讨论】:

以上是关于使用占位符创建自定义注释?的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework - 从视图脚本中清除自定义占位符

如何在 SwiftUI WidgetKit 占位符中自定义占位符外观?

Java - 文本字段上的占位符

在帐单/运输表单中自定义占位符

Django:ModelForm 自定义错误消息和占位符

如何在 Django 中删除 EmailField 上的占位符?