将时钟作为构造函数参数注入的 Spring 问题



我有一个类,它接受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” />

最新更新