java - Spring,具有原型范围的bean构造函数中的@Value问题
问题描述
cfg c= context.getBean(cfg.class);
第一次它必须工作,但第二次出现错误:
没有可用的“java.lang.String”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{}
为什么?
@Configuration
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
class cfg{
public cfg(@Value("${xx}") String xx) {
System.out.println(xx);
}
}
应用程序属性
xx = 7
我还发现,如果用 @Component 替换 @Configuration 或添加 (proxyBeanMethods = false),问题就会消失。
解决方案
@Configuration
表示一个类声明了一个或多个@Bean
方法,并且可以由 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求。如果你想@Value
工作,你需要@PropertySource
注释。
如果你用 注释它@Component
,那么它将是一个完全成熟的 Spring Bean,@Value
可以开箱即用。
推荐阅读
- python - Sympy 与 astropy 结合使用单位进行数值求解?
- angular - 从 Angular Material mat-selection-list 中删除选定的项目
- php - 如何在 Laravel 中自定义 Carbon diffForHumans
- javascript - 如何进行谷歌互动
- java - 以编程方式使用 Maven 解析器下载 jar
- ruby-on-rails - (erb):48:在`
': nil:NilClass (NoMethodError) 的未定义方法 `[]' - excel - 同步功能区下拉菜单以显示活动工作表
- pytorch - Pytorch 时代闪电节约模型
- asp.net-core - 使用 Postgres 的脚手架 API 控制器
- javascript - 如何使用变换比例()来做与“缩放”相同的事情?