【发布时间】:2019-08-20 11:03:02
【问题描述】:
我正在将我的应用程序移至 kotlin,并且我的一个文件具有用于实现策略模式的自动装配图。当我将此文件更改为 kotlin 时,Spring 会注入 bean
我已经尝试过lateinit、@jvmfield 等。我一直在进行更改并查看生成的反编译 java,看看它是否清楚为什么会出现错误。看起来它是因为 java 版本中的 hashmap 没有显示类型。
Hashmap vs HashMap<String,Object>
更改前的 Java 版本。这收集了所有 AudienceService 类型的 bean 并将它们注入到这个地图中
@Autowired
private Map<String, AudienceService> audienceServiceMap = new HashMap<>();
Kotlin 版本:
@Autowired
private lateinit var audienceServiceMap : HashMap<String, AudienceService>
上述kotlin代码的Java反编译版
@Autowired
private HashMap audienceServiceMap;
弹簧出错
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'audienceContext': Unsatisfied dependency expressed through field 'audienceServiceMap'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.HashMap<java.lang.String,
【问题讨论】:
-
将您的
HashMap引用更改为Map。 -
好吧,不知何故起作用了!!。但是 java 版本仍然没有显示 Map
所以我的理论是可行的。你能解释一下为什么会这样吗?不管怎样,谢谢!!! -
我会写一个答案并解释那部分。很高兴它成功了。
标签: spring spring-boot kotlin dependency-injection