Весенние проблемы с введением Clock в качестве аргумента конструктора - PullRequest
0 голосов
/ 13 июня 2018

У меня есть класс, который принимает объект java.time.Clock в качестве аргумента конструктора.У меня проблемы с определением этого объекта в виде bean-компонента в файле applicationContext.xml:

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-компоненты в качестве аргументов конструктора?

Ответы [ 5 ]

0 голосов
/ 26 октября 2018

Стрелок ответ почти работает, он должен быть -

<bean name=“clock” class=“java.time.Clock” factory-method=“systemDefaultZone” />
0 голосов
/ 24 июля 2018

Решение от 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>

Чтобы усугубить ситуацию, исключение Spring не особенно полезно.

0 голосов
/ 13 июня 2018

Вам нужно создать экземпляр часов и использовать их в качестве ссылки.Нечто похожее на:

<bean id="clock" class="java.time.clock"/>
<bean id="timeTracker" 
    class="com.tracker.TimeTracker">
    <constructor-arg type="java.time.Clock" ref="clock"/> 
</bean>
0 голосов
/ 13 июня 2018

Попробуй,

<bean id="timeTracker" class="com.tracker.TimeTracker">
        <constructor-arg>
          <bean class="java.time.Clock" factory-method="java.time.Clock.systemUTC" /> 
        </constructor-arg>
</bean>
0 голосов
/ 13 июня 2018

Попробуйте так:

<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 предназначен только для примитивных типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...