![](/img/trans.png)
[英]Is there a way to access the @Component declared service properties in the bundle's class code?
[英]Does a type/class need to be annotated with @Component or @Service in order to annotate it's properties with @Value
我们有以下代码,它对我们有用,我们可以通过 application.properties 设置可见的值
public enum Checker {
RED ("#FF0000"),
YELLOW ("#FFFF00");
private final String value;
@Value("${visible:true}")
private String visible;
private Checker(final String value) {
this.value = value;
}
public String getValue() {
if (visible) {
return value;
}
else {
return "#000000";
}
}
}
现在,为了更好地理解它,在能够进行值注入之前,它不应该被 Bean 初始化吗?
答案是肯定的,但不完全是。 正确的说法是类实例需要是一个 spring bean 才能被@Value
工作。 添加@Component
, @Service
使类成为 spring 托管 bean,但还有其他使用@Bean
。
一般来说,spring 工作是通过使用processor
更改或添加特性到您声明的 bean 中,与@Transactional
相同, @Value
仅在它是 bean 时才生效,是的,您可以在任何类中注释任何方法,代码将编译,但 spring 会简单不考虑。
来自@Value 文档
注意@Value注解的实际处理是由一个BeanPostProcessor执行的
您不需要注释使用@value 注释的类,@Value 表示“从属性文件中获取值”,${visible:true} 中的 true 表示如果属性文件中不存在默认值
为了更好地理解@component,看一下这个话题:@component在spring中有什么用?
对于@value 的用法,您可以查看 Baeldung 的这篇文章: https ://www.baeldung.com/spring-value-annotation
Baeldung 网站对于 Spring Boot 信息非常有用! 我建议你把它加入书签;)
我希望我能帮上一点忙!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.