当前位置: 首页 > 知识库问答 >
问题:

Spring,带有原型范围的bean构造函数中的@Value有问题

谭伟
2023-03-14
cfg c= context.getBean(cfg.class);

第一次必须工作,但第二次出现错误:

没有类型为“java.lang.String”的合格bean可用:应至少有1个bean符合autowire候选。依赖项批注:{}

为什么?

@Configuration
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
class cfg{
    public cfg(@Value("${xx}") String xx) {
        System.out.println(xx);
    }
}   

application.properties

xx = 7

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

源代码

共有1个答案

毋弘光
2023-03-14

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

如果你用@Component注释它,那么它将是一个成熟的春豆,@Value开箱即用。

 类似资料:
  • 问题内容: 我想在 Spring Java配置中 创建一个Spring bean,并在运行时传递一些构造函数参数。我创建了以下Java配置,其中有一个bean fixedLengthReport ,它在构造函数中需要一些参数。 但是我收到错误消息, 表明 未找到bean 导致 sourceSystem 无法连接。如何使用运行时构造函数参数创建bean? 我正在使用Spring 4.2 问题答案:

  • 问题内容: 这更多的是 困惑而 不是问题。我有以下代码: 即使基类构造函数为,在这里也允许对1 * 的调用。如果我们在同一包中将这些类编写为单独的类: 编译器正确地在2 *处给出了错误,因为基类构造函数不可见。 当两个类在一个类中都声明为静态时,为什么编译器没有在我的第一种情况下引发错误? 问题答案: 如果成员或构造函数被声明为私有,则仅当访问发生在包含成员或构造函数的声明的顶级类(第7.6节)的

  • 我使用Spring AOP在我们的应用程序中触发指标。我已经创建了一个注释,其中有一个与之关联的建议。除了在原型bean上调用方法的情况之外,所有标记为的方法都可以很好地调用该建议。 注释具有 PointCut表达式: 原型bean创建 DummyService有一个方法,叫做Dummymethod(String DummyString) 当是从其他服务调用的,不调用建议。 配置类 单例注册类 对

  • 问题内容: 在春季,bean的类可能没有公共构造函数,而只有私有构造函数吗?创建bean时会调用此私有构造函数吗?谢谢。 问题答案: 是的,Spring可以调用私有构造函数。如果找到具有正确参数的构造函数,无论可见性如何,它将使用反射将其构造函数设置为可访问的。

  • 我想在SpringJava配置中创建一个Springbean,并在运行时传递一些构造函数参数。我创建了以下Java配置,其中有一个beanfixedLengthReport,它需要构造函数中的一些参数。 但是我得到一个错误,sourceSystem无法连接,因为没有找到bean。如何用运行时构造函数参数创建bean? 我正在使用Spring 4.2

  • 问题内容: 我需要创建一个没有构造函数参数的不完整对象。像这样 我希望这个Bean是Spring管理的,以便以后可以使用Spring AOP。 但是我的bean需要将超时作为动态值传递-是否有一种方法可以创建在构造函数中注入了动态值的spring托管bean? 问题答案: 有一个方法,根据javadoc,它允许您指定构造函数参数,该参数用于覆盖bean定义自己的参数。因此,您可以在bean文件中放