Рассмотрим следующий код:Как @Autowire объекты SCALA весной
TimeSeries.scala
trait TimeSeries {
def someMethod()
}
object TimeSeries extends TimeSeries {
def someMethod() = { new someOtherMethod() }
}
META-INF/весна/series.xml
<bean id="timeSeries" class="com.people.user.data.TimeSeries" />
SomeService.java
class SomeService
{
@Autowired
private TimeSeries timeSeries;
TimeSeries.someMethod(); //Compile Time Error
}
Первое, что нужно отметить, это TimeSeries.scala
файл, имеющий TimeSeries Object
, поэтому я предположил, что это оказывает объем класса, и поэтому я могу вызвать его метод непосредственно TimeSeries.someMethod();
без инстанцировании его.
Однако, это не тот случай. Я получаю ошибку времени компиляции при этом.
Cannot make a static reference to the non-static method `someMethod`
Таким образом, я почувствовал, что представил @Autowiring, чтобы Spring могла автоматически создать его. Однако, это не работает, либо говорят об ошибке для:
<bean id="timeSeries" class="com.people.user.data.TimeSeries" />
Погрешность составляет: TimeSeries is an interface and not a class.
Я понял это и так изменили название класса объекта, чтобы быть:
object TimeSeriesImpl extends TimeSeries {
def someMethod() = { new someOtherMethod() }
}
Также была изменена весна XML:
<bean id="timeSeries" class="com.people.user.data.TimeSeriesImpl" />
Но теперь возникает ошибка при создании экземпляра класса scala.
Кажется, что Spring не понимает, как создать экземпляр класса Scala с указанными выше конфигурациями.
Вот LOG:
LOG:
Instantiation of bean failed; nested exception
is org.springframework.beans.
BeanInstantiationException:
Could not instantiate bean class [com.people.user.data.TimeSeries]:
No default constructor found; nested exception
is java.lang.NoSuchMethodException: com.people.user.
data.TimeSeries.<init>()