2013-08-04 175 views
0

我一直试图在我的注释中设置logTime属性在spring xml中。我看到这并不像我第一次想到的那么容易。春季设置注释属性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([email protected]("#{ConfigureAnnotation.doLogging}")) 

任何想法如何,我可以在XML层次做到这一点或者是这不可能与注释依赖注入?

回答

1

是的 - 这不会工作。

@LogExecTime([email protected]("#{ConfigureAnnotation.doLogging}")) 

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

你既可以把这个:

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

由于在弹簧上的真正的现场管理bean的地方,或有改变你的注释是这样的:

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

    public String logTime() default "true"; 
} 

,并有什么是处理在运行时注释也可以接受EL表达式并适当地解决它,并且您的组件将如下所示:

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

    // blah blah blah 
} 
+0

嗨Iscoughlin。 @Value("#{ConfigureAnnotation.doLogging}") boolean logTime = true;不适用于我的注释,但logTime = "#{ConfigureAnnotation.doLogging}"看起来可以。我的Aspect读取它,但只打印“#{ConfigureAnnotation.doLogging}”,而不是我在xml中设置的值“true”。你能告诉我你将如何实现这一目标吗? – MWright

+0

您需要对分配给注释的值执行一些操作。在这种情况下,值为 #{ConfigureAnnotation.doLogging} 因此,您需要实例化一个弹簧EL解析器来解析该值或解析出您的自身的键以及它的某些内容,如System.getProperty(annotation .value()。substring(2,annotation.value()。size()-3) – lscoughlin