使用占位符创建自定义注释?
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 - 从视图脚本中清除自定义占位符