java - 是否需要使用 @Component 或 @Service 注释类型/类才能使用 @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
。
一般来说,通过使用更改或添加特性到声明的 bean 的 Spring 工作processor
,只有当它是一个 bean@Transactional
时@Value
才会生效,是的,你可以在任何类中注释任何方法并且代码将编译但 Spring 不会简单地考虑它。
来自@Value文档
请注意,@Value 注释的实际处理是由 BeanPostProcessor 执行的
推荐阅读
- node.js - 如何通过指定我要创建的项目数在 Mongodb 中自动创建具有不同 ID 的项目表?
- python - 根据缺失数据添加行
- php - 用ftp制作php文件夹
- javascript - 如何在 django-leaflet 传单地图中表示 Geodjango 模型?
- docker - 在 Heroku 上部署 Net core 5.0 API 失败并出现 Docker 错误:无法启动 Kestrel
- smartcontracts - 带有 OpenZeppelin 合约的 Tron 网络
- kotlin - 如何在 Android Studio 中实现 Admob 插页式广告 - Kotlin
- javascript - 如何在javascript倒计时上实现开始和停止按钮
- python - 来自视频文件的 Python 4 字符编解码器
- node.js - 如何在使用猫鼬创建的用户集合内的数组中获取特定项目?