我有一个简单的场景,其中我按如下方式扩展了Scala特质:
trait Vehicle {
@Autowired
private var myDistanceLogger: MyDistanceLogger = null
def travel(miles:Int) = {
println("travelling " + miles)
myDistanceLogger.logMiles(miles)
}
}
@Component
class Truck extends Vehicle {
}
即使Truck程序包处于Springs组件扫描中,我仍收到nullpointer异常。包中的所有其他(未扩展)类都可以正确连接。关于什么是错的任何想法?
最佳答案
这有点猜测-根据this的文章,scala中的特征被转换为java接口(interface)。
所以,你的特质:
trait Vehicle {
@Autowired
private var myDistanceLogger: MyDistanceLogger = null
}
会被翻译成:
public interface Vehicle {
public MyDistanceLogger myDistanceLogger();
}
和
@Autowired
在 setter/getter 中没有任何意义,我猜这是为什么不自动接线的原因。