我之前曾问过这个问题,但是从来没有任何有意义的答案。
如果我可以在Java Spring中用@Service
注释ServiceClass
@Autowired
private ServiceClass serviceClass;
或更好
private final ServiceClass serviceClass;
public userManagementClass(ServiceClass serviceClass) {
this.serviceClass = serviceClass;
}
然后我换成了Kotlin,然后。
@Autowired
private lateinit var addressRepository: AddressRepository
使用@Repository
注释AddressRepository的位置很好,但现在第一个使用@Service
的ServiceClass
@Autowired
private lateinit var serviceClass: ServiceClass
和
@Autowired constructor(
private val serviceClass: ServiceClass
)
都给出错误No beans of type found
我现在是否需要在Kotlin中为我的服务使用构造函数?
我读过许多标题为“了解Kotlin Lateinit”的文章,但不是,但我认为我仍然缺少一些核心思想,因为它们都没有任何该死的意义... Kotlin文档是不错的,但仅适用于您已经知道..否则也很混乱。
编辑似乎表明,给ServiceClass构造函数也没有做任何事情
答案 0 :(得分:3)
在kotlin(以及我认为的Java)中,您可以像这样将依赖项注入到构造函数中:
import org.springframework.stereotype.Repository
import org.springframework.stereotype.Service
@Service
class ServiceClass constructor(
private val repository: AddressRepository
) {
// Do stuff here
}
@Repository
class AddressRepository
与以下相同:
@Service
class ServiceClass {
@Autowired
private lateinit var repository: AddressRepository
// Do stuff here
}
@Repository
class AddressRepository
但是它允许您在不需要Spring Context(@SpringBootTest)的情况下进行单元测试。
然后,您可以通过其他相同方式注入服务
@Service
class OtherService constructor(
private val service: ServiceClass
) {
// Other stuff here
}
对于我来说,此代码没有bean问题。 (IntelliJ 2019.1.1)