我可以写一个使用自动布线的Spring bean的Kotlin扩展函数吗?
我试图创建一个扩展函数,其实现使用Spring bean。 通过在包的顶层定义扩展功能,似乎不可能做到这一点。 我试过这个:
@Component class Converter { companion object { @Autowired lateinit var transformer: Transformer fun Class1.convert(): Class2 { return Class2 (this, transformer.transform(someStringProperty)) } } }
其中transform
是将某个字符串转换为另一个字符串的函数,而Class1
则是一些具有someStringProperty
属性的类。 我希望其他类可以import pkg.Converter.Companion.convert
,然后可以使用x.convert()
,其中x
是Class1
类型的对象。
语法工作,并在其他类中使用x.convert()
编译罚款。 但在运行时会导致异常: kotlin.UninitializedPropertyAccessException: lateinit property transformer has not been initialized
它看起来像Spring不是自动装配的变量,因为它在一个伴侣对象,而不是一个实际的组件对象。
使用@Component
注释伴随对象不起作用。
我不认为直接在Converter
内移动Class1.convert
会工作,因为然后使用x.convert()
将需要一个Converter
对象的实例,我不明白如何使用扩展函数语法来做到这一点。
有没有办法做到这一点,或者我不得不放弃扩展函数语法?
- 如何在基本类型中使用kotlin中的@Autowired或@Value等Spring注解?
- Spring @PostConstruct取决于@Profile
- Kotlin协程和Spring Framework 5反应类型
- Kotlin NoClassDefFoundError和spring @RequestMapping方法
- 找到未索引的远程资源库
- Kotlin数据类上的Spring构造函数注解,具有默认值
- 异步春季启动使用Kotlin无法正常工作
- 带有Jetty + Jersey的Spring Boot始终显示404
- Kotlin无法在类中使用@Configuration @EnableWebMvc注释创建@Autowired字段