使用Spring @Autowired和Scala Trait

前端之家收集整理的这篇文章主要介绍了使用Spring @Autowired和Scala Trait前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个简单的场景,我扩展Scala特征如下:

  1. trait Vehicle {
  2. @Autowired
  3. private var myDistanceLogger: MyDistanceLogger = null
  4. def travel(miles:Int) = {
  5. println("travelling " + miles)
  6. myDistanceLogger.logMiles(miles)
  7. }
  8. }
  9. @Component
  10. class Truck extends Vehicle {
  11. }

即使Truck包在Springs组件扫描中,我也得到一个nullpointer异常.包中的所有其他(非扩展)类都很好.关于什么是错的任何想法?

最佳答案
这是一个小推测 – 基于this文章,scala中的特征被转换为java接口.
所以,你的特点:

  1. trait Vehicle {
  2. @Autowired
  3. private var myDistanceLogger: MyDistanceLogger = null
  4. }

会被翻译成:

  1. public interface Vehicle {
  2. public MyDistanceLogger myDistanceLogger();
  3. }

并且@Autowired在吸气器中没有意义,我猜这就是为什么这不能自动装配的原因.

猜你在找的Spring相关文章