spring - 无法通过使用 kotlin 开放类构造函数来实例化 spring bean 属性
问题描述
open class XService( // this is open because spring-cglib
val yService: YService
) {
fun doX() {
yService.doY()
}
}
interface YService {
//method definitions
}
正如您从上面看到的,XService
取决于YService
接口。我试图通过提供两种不同的YService
接口实现来实例化两个不同的bean,比如说AService:YService
和BService:YService
。
@Configuration
class SomeBeans{
@Bean
fun firstXService(aService:AService):XService {//AService is a @Service annotated class, so it is perfectly being injected here, aka argument is not null
return XService(
yService = aService
)
}
@Bean
fun secondXService(bService:BService):XService {//BService is a @Service annotated class, so it is perfectly being injected here, aka argument is not null
return XService(
yService = bService
)
}
}
以上是完美实例化bean,我可以看到这两个bean位于上下文中。
但是当我碰巧运行一些集成测试(使用spring上下文)时,每次调用xService.doX()
都失败了NPE:null
,这是因为yService
为空。
知道这里发生了什么吗?引擎盖下发生了什么?
提前致谢!
解决方案
推荐阅读
- python - 如何从线程执行的函数中获取值?
- javascript - 如何在控制台中的输出末尾删除“调试器评估代码”
- mongodb - 如何按最新版本获取文档列表,其中版本是一个字段?
- python - 如何确定 jupyter notebook 中的内核是否继续运行?
- java - 读取令牌时出现循环问题
- javascript - 在另一个 onclick div 中带有 Onlick 事件的 div
- python-3.x - 如何在 Windows 上执行 python 的 Ansible 模块?
- javascript - 我没有看到使用 javascript 的新行
- c# - 如果字符串为空,有没有办法将字符串设置为特定值?
- json - Squarespace 通过 URL 访问 JSON 属性?