gpt4 book ai didi

java - 如何在构造函数上使用 @Autowired DI Autowiring 未定义 bean 的属性?

转载 作者:行者123 更新时间:2023-12-02 07:31:47 25 4
gpt4 key购买 nike

我有一个 EquityOrder 类,其中包含股票列表和作为其属性的字符串。还定义了方法“placeOrder”。我已经 Autowiring 了我的构造函数,并且 Equity 的 Bean 已在我的 XML 文件中定义。

@Autowired
public EquityOrder(String name, List<Equity> equity) {
this.name = name;
this.equity = equity;
}

public void placeOrder() {

for (Equity eq : equity)
System.out.println("Placing order for " + eq.getSecurityName()
+ "with quantity " + eq.getQuantity());
}

在 xml 中,我有以下场景,没有错误。

<context:annotation-config />
<bean name="testEquity" class="com.sapient.Spring.Equity.Equity">

<property name="symbol" value="MSFT"></property>
<property name="securityName" value="Microsoft"></property>
<property name="type" value="IT"></property>
<property name="quantity" value="100"></property>

</bean>

<bean name="testOtherEquity" class="com.sapient.Spring.Equity.Equity">

<constructor-arg value="GOOG">
</constructor-arg>
<constructor-arg value="Google"></constructor-arg>
<constructor-arg value="IT"></constructor-arg>
<constructor-arg value="100"></constructor-arg>

</bean>

<bean name="testEquityOrder" class="com.sapient.Spring.Equity.EquityOrder">
</bean>

问题 - 当构造函数中没有字符串时,项目运行正常。但是如果构造函数中有 String,它会抛出异常 -

Error creating bean with name 'testEquityOrder' defined in class path resource 
[SpringConfig.xml]: Unsatisfied dependency expressed through constructor argument with
index 0 of type [java.lang.String]: : No matching bean of type [java.lang.String] found
for dependency: expected at least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations: {}; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of
type [java.lang.String] found for dependency: expected at least 1 bean which qualifies
as autowire candidate for this dependency. Dependency annotations: {}

这意味着容器正在寻找 String bean,但它不在那里。如何解决这个问题。一种方法是在 setter 上使用注释。但是如何在构造函数上使用 @Autowire 注解来实现呢?谢谢

最佳答案

您可以使用<constructor-arg>为名称属性提供值。元素如下:

<bean name="testEquityOrder" class="com.sapient.Spring.Equity.EquityOrder">
<constructor-arg value="dummyValue" />
</bean>

无论如何,另一个构造函数参数都会被 Autowiring ,因为它是一个已经定义的 bean。

附注另外,我必须说 EquityOrder 似乎是一个数据对象,除非它是一些配置数据,否则如果它依赖于用户输入,则不应该像这样注入(inject)/ Autowiring 。

关于java - 如何在构造函数上使用 @Autowired DI Autowiring 未定义 bean 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com