首页 > 解决方案 > 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),问题就会消失。

源代码

标签: javaspring

解决方案


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

如果你用 注释它@Component,那么它将是一个完全成熟的 Spring Bean,@Value可以开箱即用。


推荐阅读