Java 如何告诉Spring在不提供构造函数参数的情况下实例化所选bean?
问题: 我正在与另一个团队编写的库集成。这个库提供了一组我在Spring驱动的应用程序中使用的类。我的应用程序中的每个bean都在单例范围内 该库中99%的类也使用构造函数注入 我使用的是XML,我的配置看起来非常类似于以下内容: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
<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"/>
从文件中
“构造函数”
“属性”
和“构造函数参数”
元素,始终
覆盖自动布线。注意:此属性不会被继承
子bean定义。因此,需要根据具体情况对其进行规定
bean定义
先生,你是个救生员。它很有魅力,非常感谢!
<bean class="lib.Service1" autowire="constructor"/>