【问题标题】:Spring, problem with @Value in bean constructor with prototype scopeSpring,具有原型范围的bean构造函数中的@Value问题
【发布时间】:2021-11-17 01:18:31
【问题描述】:
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);
    }
}   

application.properties

xx = 7

我还发现,如果用@Component 替换@Configuration 或添加(proxyBeanMethods = false),问题就会消失。

Source code

【问题讨论】:

  • 由于所有类都在一个不是很长的单个文件中,我认为您应该将整个内容作为问题的一部分(而不是发布到 repo 的链接)。当您的回购不再存在时,这也将有助于其他人。

标签: java spring


【解决方案1】:

@Configuration 表示一个类声明了一个或多个@Bean 方法,并且可以由 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求。如果你想让@Value 工作,你需要@PropertySource 注释。

如果您使用 @Component 对其进行注释,那么它将是一个成熟的 Spring Bean,@Value 可以在其上开箱即用。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2011-12-26
    • 2011-11-07
    • 2012-02-05
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多