这可以通过替换现场注入来轻松解决AbstractEntityService
使用构造函数注入,并删除@Service
注解:
abstract class AbstractEntityService<T>(
private val entityRepository: AbstractRepository<T>,
private val otherService: OtherService,
) {
...
}
现在,如果这个类不是抽象的,它的依赖项可以由 Spring 注入,至少与定义中的一样好otherService
是一个字段。但这个定义更好,因为您现在还可以将依赖项从子类传递到此类中,如下所示:
@Service
class MyEntityService(
myRepository: MyRepository,
otherService: OtherService,
/* some other dependencies */
) : AbstractEntityService<MyEntity>(myRepository, otherService) {
/* some additional methods */
}
我不太清楚你的意思为什么MyRepository
由于类型擦除而无法自动连接,我想问题中缺少一些细节。
如果问题是您有不同类型的组件MyRepository
在您的应用程序上下文中,您可以使用以下方式注释其中之一@Primary
这使得 Spring 在必须自动装配单个候选者时选择该组件。
另一种方法可能是给你的 bean 一个名字,然后限定你的依赖关系MyEntityService
:
@Repository("myrepo")
open class MyRepository : AbstractRepository<MyEntity> {
...
}
@Service
class MyEntityService(
@Qualifier("myrepo")
myRepository: AbstractRepository<MyEntity>,
otherService: OtherService,
/* some other dependencies */
) : AbstractEntityService<MyEntity>(myRepository, otherService) {
/* some additional methods */
}