我有一个类,它将java.time.Clock对象作为构造函数参数。 我在applicationContext.xml文件中将其定义为bean时遇到问题:
TimeTracker.java
public class TimeTracker{
public final Clock clock;
public TimeTracker(Clock clock){
this.clock = clock;
}
的applicationContext.xml
<bean id="timeTracker"
class="com.tracker.TimeTracker">
<constructor-arg type="java.time.Clock" value=""/>
</bean>
我遇到的错误是:不明确的构造函数参数类型 - 您是否将正确的bean引用指定为构造函数参数?
答案 0 :(得分:2)
试试这样:
<bean class=“java.time.Clock” factory-method=“java.time.Clock.systemDefaultZone” name=“clock”/>
<bean id="timeTracker"
class="com.tracker.TimeTracker">
<constructor-arg ref=“clock”/>
</bean>
value
属性仅适用于基本类型。
答案 1 :(得分:0)
您需要实例化一个时钟并将其用作参考。类似于:
<bean id="clock" class="java.time.clock"/>
<bean id="timeTracker"
class="com.tracker.TimeTracker">
<constructor-arg type="java.time.Clock" ref="clock"/>
</bean>
答案 2 :(得分:0)
尝试,
<bean id="timeTracker" class="com.tracker.TimeTracker">
<constructor-arg>
<bean class="java.time.Clock" factory-method="java.time.Clock.systemUTC" />
</constructor-arg>
</bean>
答案 3 :(得分:0)
Strelok的解决方案几乎可以用,但是对我来说却失败了,因为您不需要定义工厂方法的完整路径。它是相对于工厂类的,因此,如果键入factory-method =“ java.time.Clock.systemDefaultZone”,它将在 java.time.Clock.java.time.Clock.systemDefaultZone()<中查找方法/ em>。
<bean id="systemClock" class="java.time.Clock" factory-method="systemUTC" />
<bean id="timeTracker" class="com.tracker.TimeTracker">
<constructor-arg type="java.time.Clock" ref="systemClock"/>
</bean>
使情况更糟的是,Spring异常并不是特别有用。
答案 4 :(得分:0)
Strelok的答案几乎可行,应该是-
<bean name=“clock” class=“java.time.Clock” factory-method=“systemDefaultZone” />