gpt4 book ai didi

java - 如何在 Spring 中 @Autowire scala 对象

转载 作者:行者123 更新时间:2023-12-01 10:38:58 25 4
gpt4 key购买 nike

考虑以下代码:

TimeSeries.scala

trait TimeSeries {
def someMethod()
}

object TimeSeries extends TimeSeries {
def someMethod() = { new someOtherMethod() }
}

META-INF/spring/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() }
}

还更改了 spring XML:

<bean id="timeSeries" class="com.people.user.data.TimeSeriesImpl" />

但是现在在实例化 scala 类时出现错误。

Spring 似乎不明白如何使用上述配置实例化 Scala 类。

这是日志:

日志:

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>()

最佳答案

Cannot make a static reference to the non-static method someMethod

问题是您无法直接调用 TimeSeries.someMethod();

哪里,TimeSeries 是 scala 对象,someMethod() 是该对象上的方法。

正确的做法是:

TimeSeries$ timeSeries = TimeSeries$.MODULE$;
timeSeries.someMethod();

关于java - 如何在 Spring 中 @Autowire scala 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com