首页 > 解决方案 > 无法通过使用 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:YServiceBService: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为空。

知道这里发生了什么吗?引擎盖下发生了什么?

提前致谢!

标签: springkotlincglib

解决方案


推荐阅读