Spring @Autowire不在Kotlin工作

时间:2016-12-22 18:45:18

标签: java spring kotlin

对于我的大学任务,我需要使用各种注入依赖关系的方法,我使用注释坚持使用autowire,因为它表示依赖关系尚未初始化。我的代码:

class TeleporterDeliveryMethod: DeliveryMethod {
    @Autowired
    lateinit var teleporter: Teleporter

    override fun deliver(pkg: Package): Int {
        teleporter.teleport(pkg)
        return 0
    }
}

传送者课程:

class Teleporter3000 : Teleporter {
    override fun teleport(pkg: Package) {
        println("Teleporting package ${pkg.id}...")
    }
}

我也在xml中定义了这个:

<bean id="teleporterDeliveryMethod" class="app.delivery.TeleporterDeliveryMethod"/>
<bean id="teleporter" class="app.delivery.Teleporter3000" scope="prototype"/>

Teleporter是一个具有一种方法teleport(...)

的界面

运行此代码时,编译说:Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property teleporter has not been initialized

如果我手动在xml中注入依赖项,它会按预期工作:

class="app.delivery.TeleporterDeliveryMethod">
    <property name="teleporter" ref="teleporter"/>
</bean>

即使自动装配也适用于xml:

<bean id="teleporterDeliveryMethod" class="app.delivery.TeleporterDeliveryMethod" autowire="byType"/>

1 个答案:

答案 0 :(得分:1)

<context:component-scan base-package="app"/>

bean声明中缺少