Для моей университетской задачи мне нужно использовать различные методы инъекции зависимостей, я застрял в autwire, используя аннотацию, потому что он говорит, что зависимость не была инициализирована. Мой код:
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"/>
<context:component-scan base-package="app"/>
отсутствовал из объявлений bean