我有一个简单的场景,其中我按如下方式扩展了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 中没有任何意义,我猜这是为什么不自动接线的原因。

09-25 20:14