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

我如何在spring boot使用带有构造函数注入的YAML属性?

曾歌者
2023-03-14

我知道这应该是小菜一碟,但我就是一事无成。

在我的spring boot应用程序中,application.yml文件中,我有这样一个条目:

some:
    constructor:
        property: value

我有一个spring服务(这是假的,但证明了问题):

package somepackage;

@Service
public class DummyService {
    public DummyService(@Value("${some.constructor.property}") String path) {}
}

但启动失败:

org.springframework.beans.factory.beanCreationException:创建文件[...(类文件)...]中定义的名为“dummy service”的bean时出错:实例化bean失败;嵌套异常为org.springframework.beans.beanInstantiationException:无法实例化[SOMEPackage.DummyService]:未找到默认构造函数;嵌套异常是java.lang.NoSuchMethodException:somePackage.dummyService.()

我如何才能说服spring它应该使用非空的构造函数,并且它应该从YAML文件中获得那个构造函数参数呢?注意:我没有使用任何XML bean配置文件或其他任何文件,我更希望不使用。

共有2个答案

艾意蕴
2023-03-14

如果有人试图在Scala中这样做--这也是我真正想要做的,但希望在用Scala尝试之前在Java中得到答案--这是可行的:

@Service
class DummyService @Autowired()(@Value("${some.constructor.property}") val path: String) {

}

这在scala构造函数自动生成的SO案例中进行了介绍。

漆雕恺
2023-03-14

只需在构造函数上添加@Autowired注释。

@Autowired
public DummyService(@Value("${some.constructor.property}") String path) {}
 类似资料:
  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 我必须为要使用构造函数注入的不同属性值创建多个相同类型的bean。 目前我已经使用Bean范围作为原型 现在它正在按照上面的代码创建2个bean。期望:如何组合getClient

  • 我有一个接口,它在两个地方定义如下: 我的客户端实现类没有任何注释,只有必需的构造函数。在这种情况下,如何限定正确的接口实现用法?我不想使用,因为在我的例子中,将其中一个用法命名为primary在语义上是不正确的(它们在某种意义上是相等的)。我需要用相同的实现类传递相同的接口,但针对受尊敬的客户机的特定用例进行了不同的配置。我想命名一个参数就足够了,通过这个参数我将实现注入到bean创建方法中,但

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 问题内容: 我的spring bean具有一个带有唯一强制性参数的构造函数,我设法用xml配置对其进行了初始化: 然后,我像这样使用此bean,并且效果很好。 但是我想用注释指定contructor arg值,例如 这可能吗 ? 提前致谢 问题答案: 首先,必须在bean定义中而不是在注入点中指定构造函数arg。然后,你可以利用spring的注释(spring 3.0) 就我所看到的问题而言,这可

  • 我有一个有两个构造函数的类。我正在尝试使用 guice 工厂创建此类的实例。如果未传递任何参数,则应调用默认构造函数。如果传递了参数,则应调用带参数的构造函数。但目前即使我将参数传递给工厂方法,仍然会调用默认构造函数。带参数的构造函数根本不被调用。下面是我的工厂类。 以下是我尝试注入的构造函数。 下面是我在抽象模块实现类中的模块绑定。 下面是我如何调用构造函数。 我在这里做错了什么?任何帮助都将不