0

我一直在尝试logTime在 spring xml 的注释中设置属性。我看到这并不像我最初想象的那么容易。

@Component
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecTime {

public boolean logTime() default true;      
}

我试图在@Value没有运气的情况下使用带有接口的注释:

I)

  @Component
  @Retention(RetentionPolicy.RUNTIME)
  public @interface LogExecTime {
    @Value("#{ConfigureAnnotation.doLogging}")
public boolean logTime() default true;      
  }

并且

II)    
 @LogExecTime(logTime=@Value("#{ConfigureAnnotation.doLogging}"))

有什么想法可以在 xml 级别执行此操作,或者注释依赖注入无法做到这一点?

4

1 回答 1

1

是的——那是行不通的。

@LogExecTime(logTime=@Value("#{ConfigureAnnotation.doLogging}"))

甚至永远不会编译。注释不是可执行代码,它们只是标记——插入到整个类文件中的额外信息。

你可以这样说:

@Value("#{ConfigureAnnotation.doLogging}")
boolean logTime = true;

作为某个地方的spring托管bean上的一个真实字段,或者将您的注释更改为:

@Component
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecTime {

    public String logTime() default "true";
}

并且让任何在运行时处理该注释的东西也接受一个spring EL表达式并适当地解析它,你的组件看起来像这样:

@LogExecTime(logTime = "#{ConfigureAnnotation.doLogging}")
public class SomeComponent {

    // blah blah blah
}
于 2013-08-04T20:34:15.820 回答