Java 使用占位符创建自定义注释?
我正在创建一些自定义注释。我需要创建一个带有“占位符”的人,因为它在春季使用Java 使用占位符创建自定义注释?,java,parsing,annotations,placeholder,Java,Parsing,Annotations,Placeholder,我正在创建一些自定义注释。我需要创建一个带有“占位符”的人,因为它在春季使用 @Value("#{aParameter}") 或者在JSF2中 @ManagedProperty(value="#{aParameter}") 我想我必须在某个地方有一个映射(.properties或.xml文件或enum类),但我需要知道如何在自定义注释接口中编写这种方法。我的意思是如何在注释界面中声明占位符?在某处应用注释时,如何确保赋值(在映射文件中) 提前感谢。您不在注释声明中这样做,而是在使用该注释的代
@Value("#{aParameter}")
或者在JSF2中
@ManagedProperty(value="#{aParameter}")
我想我必须在某个地方有一个映射(.properties或.xml文件或enum类),但我需要知道如何在自定义注释接口中编写这种方法。我的意思是如何在注释界面中声明占位符?在某处应用注释时,如何确保赋值(在映射文件中)
提前感谢。您不在注释声明中这样做,而是在使用该注释的代码中这样做 例如,
@Value
声明如下:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
public @interface Value {
/**
* The actual value expression: e.g. "#{systemProperties.myProp}".
*/
String 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);
}
如果您跟踪它的使用方式,您将在org.springframework.web.bind.annotation.support.HandlerMethodInvoker
类中看到,该值直接从注释defaultValue=((value)paramAnn).value()获取代码>然后按如下方式解析:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
public @interface Value {
/**
* The actual value expression: e.g. "#{systemProperties.myProp}".
*/
String 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注释并使其有用