对于我的大学任务,我需要使用各种注入依赖关系的方法,我使用注释坚持使用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"/>
答案 0 :(得分:1)
<context:component-scan base-package="app"/>