我有一个类,它接受java.time.Clock对象作为构造函数参数。 我在应用程序上下文中将其定义为 bean 时遇到问题.xml:
时间跟踪器.java
public class TimeTracker{
public final Clock clock;
public TimeTracker(Clock clock){
this.clock = clock;
}
应用程序上下文.xml
<bean id="timeTracker"
class="com.tracker.TimeTracker">
<constructor-arg type="java.time.Clock" value=""/>
</bean>
我遇到的错误是:构造函数参数类型不明确 - 您是否将正确的 Bean 引用指定为构造函数参数?
像这样尝试:
<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
属性仅适用于基元类型。
您需要实例化时钟并将其用作参考。类似于:
<bean id="clock" class="java.time.clock"/>
<bean id="timeTracker"
class="com.tracker.TimeTracker">
<constructor-arg type="java.time.Clock" ref="clock"/>
</bean>
尝试,
<bean id="timeTracker" class="com.tracker.TimeTracker">
<constructor-arg>
<bean class="java.time.Clock" factory-method="java.time.Clock.systemUTC" />
</constructor-arg>
</bean>
Strelok 的解决方案几乎有效,但对我来说失败了,因为您不需要定义工厂方法的完整路径。它是相对于工厂类的,所以如果你输入factory-method="java.time.Clock.systemDefaultZone",它将在java.time.Clock.java.time.Clock.systemDefaultZone((中查找一个方法。
<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>
更糟糕的是,春季例外并不是特别有用。
斯特雷洛克的回答几乎有效,应该是——
<bean name=“clock” class=“java.time.Clock” factory-method=“systemDefaultZone” />