spring - Kotlin Spring:未解决的参考方法
问题描述
我在文件 A 中有以下类:
@Service
class MyService(
private val myLoader: Loader
) {
fun load(myKey: SomeKey) =
myLoader.loadStuff(myKey)
}
我想在另一个文件 B 中调用该函数,如下所示:
MyService.load(myKey)
但是,load() 方法在 IntelliJ 中标记为红色。错误显示“未解决的参考:加载”,我不知道为什么。当我输入MyService.
IntelliJ 时,甚至会建议加载方法。
我该如何解决这个问题?
解决方案
由于您使用的是 Spring,因此应该调用的其他组件MyService
也必须是 Spring 管理的 Bean,以便它可以获取MyService
bean。文件 B 中的组件应如下所示:
@Service
class MyServiceB (
private val myService: MyService
) {
fun test(myKey: SomeKey) = myService.load(myKey)
}
注意@Service
使它成为 Spring 管理的 Bean 的注释以及作为构造函数MyService
的参数的事实,告诉 Spring必须注入MyServiceB
类型的 Bean 。MyService
鉴于您有一个对象而不是一个类,您将不得不执行以下操作:
object MyServiceB (
lateinit var myService: MyService
) {
fun test(myKey: SomeKey) = myService.load(myKey)
}
@Configuration
class MyServiceBConfiguration(private val myService: MyService) {
@Bean
fun myServiceB(): MyServiceB {
return MyServiceB.also {
it.myService = myService
}
}
}
这应该可行,但我绝对不推荐它。这是一个 hack,绝对不是一个干净的解决方案。考虑一下我最初的建议。
推荐阅读
- python - 删除文档会引发 PermissionError:[WinError 32]
- jquery - 仅在使用 ajax 重新加载页面内容后,如何运行 js/jquery 函数?
- flutter - SingleChildScrollView 不起作用,出现底部溢出错误
- windows - Azure IoT Edge EFLOW 安装中断,现在验证失败
- mysql - Laravel查询如何使数据库中的3个数据在视图表中变为1
- flutter - 在 ThemeData 中的 AppBarTheme 中定义 AppBar 的渐变
- python-3.x - 在窗口 tkinter 中显示消息
- regex - 如何从bash中的变量中删除匹配的动态字符串部分
- bash - 将子字符串移动到另一行
- android - Kotlin 片段未附加到上下文