Java 如何告诉Spring在不提供构造函数参数的情况下实例化所选bean?

Java 如何告诉Spring在不提供构造函数参数的情况下实例化所选bean?,java,spring,constructor,Java,Spring,Constructor,问题: 我正在与另一个团队编写的库集成。这个库提供了一组我在Spring驱动的应用程序中使用的类。我的应用程序中的每个bean都在单例范围内 该库中99%的类也使用构造函数注入 我使用的是XML,我的配置看起来非常类似于以下内容: <bean id="lib.service1" class="lib.Service1"/> <bean id="lib.service2" class="lib.Service2"> <constructor-arg ref="lib

问题:

我正在与另一个团队编写的库集成。这个库提供了一组我在Spring驱动的应用程序中使用的类。我的应用程序中的每个bean都在单例范围内

该库中99%的类也使用构造函数注入

我使用的是XML,我的配置看起来非常类似于以下内容:

<bean id="lib.service1" class="lib.Service1"/>
<bean id="lib.service2" class="lib.Service2">
 <constructor-arg ref="lib.service1"/>
</bean>
<bean id="lib.service3" class="lib.Service3">
 <constructor-arg ref="lib.service1"/>
</bean>
<bean id="lib.service4" class="lib.Service3">
 <constructor-arg ref="lib.service2"/>
 <constructor-arg ref="lib.service3"/>
</bean>
<!-- other bean definitions -->
<bean id="lib.serviceN" class="lib.ServiceN">
 <constructor-arg ref="lib.serviceX"/>
 <constructor-arg ref="lib.serviceY"/>
 <constructor-arg ref="lib.serviceZ"/>
 <constructor-arg ref="lib.serviceK"/>
</bean>
<!-- other bean definitions -->

我想要的是:

我想简化我的配置,不使用bean ID,并要求spring根据bean构造函数中的参数类型为我进行构造函数注入。我还可以要求库实现者向类构造函数添加@Inject注释(99%的类只有一个公共构造函数),但这就是我所能要求的对它们的库进行wrt重构

最后,我希望在我的spring配置中有以下内容(不起作用,但说明了这个想法):


在这里,我希望Spring能够发现我希望对所有这些bean使用构造函数注入,并根据构造函数参数类型推断bean实例

请注意,我不能使用组件扫描-它们只有一个包(在上面给出的示例中为lib),该包中的某些类对我的应用程序没有用处,而且成本太高,无法不必要地创建。另外,我没有使用的一些类是实验性的,可以在不事先通知的情况下更改/重命名/删除。

添加
autowire=“constructor”
,假设这些bean类型只有一个构造函数,并且相应的参数与单个bean匹配

<bean class="lib.Service1" autowire="constructor"/>

从文件中

  • “构造函数”
  • 类似于构造函数参数的“byType”。如果有 不是中构造函数参数类型的一个bean 在bean工厂中,引发了一个致命错误。请注意,显式 依赖项,即
    “属性”
    “构造函数参数”
    元素,始终 覆盖自动布线。注意:此属性不会被继承 子bean定义。因此,需要根据具体情况对其进行规定 bean定义


    先生,你是个救生员。它很有魅力,非常感谢!
    <bean class="lib.Service1" autowire="constructor"/>