2013-05-17 28 views
0

我正在創建一些自定義註釋。我需要創建一個「佔位」某人因爲它是在春天用佔位符創建自定義註釋?

使用
@Value("#{aParameter}") 

或JSF 2

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

我想,我必須有一個映射的地方(的.properties或.xml文件或枚舉類),但我需要知道在自定義註釋界面中編寫此方法。我的意思是如何在annoatation界面中聲明一個佔位符?以及在某處應用註釋時如何確保其值的分配(在映射文件中)?

在此先感謝。

回答

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); 
} 

所以邏輯以解決性能,例如放置在類 實際使用閱讀註釋,使他們有用的照顧。