Я читаю ответы из Kotlin переменная экземпляра имеет значение NULL при доступе из прокси-класса Spring , et c., Но я все еще не могу понять, что не так с моим кодом.
У меня действительно простой пример. Я удалил весь код, чтобы избежать некоторых приватных полей или методов, и явно указал все как открытые.
@Transactional
open class QuartzServiceStarter(open val factory: SchedulerFactoryBean) { }
Мой контекст конфигурации Spring:
@SpringBootApplication
@EnableTransactionManagement
class SampleApp {
...
@Bean
fun quartzServiceStarter(factory: SchedulerFactoryBean) = QuartzServiceStarter(factory)
...
}
Я также использую оба kotlin - полностью открытый плагин с пружинной поддержкой. Если я удаляю Транзакционную аннотацию, заводская зависимость корректно вводится, но если я ее добавляю, то создается прокси-сервер CGLIB с null
зависимой инъекцией. Вопрос: я что-то упускаю, чтобы разрешить Spring CGLIB-прокси работать с kotlin?
spring.version 5.2.2.RELEASE
spring-boot.version 2.2.2.RELEASE
UPD. Скомпилированный класс
@org.springframework.transaction.annotation.Transactional public open class QuartzServiceStarter public constructor(factory: org.springframework.scheduling.quartz.SchedulerFactoryBean) {
public open var factory: org.springframework.scheduling.quartz.SchedulerFactoryBean /* compiled code */
@org.springframework.transaction.annotation.Transactional public open fun startJob(): kotlin.Unit { /* compiled code */ }