Bootstrap

Spring注入Map学习

Spring注入Map学习

在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例

在这里插入图片描述

有2个方法很好用

1. 使用@Autowired注入

在这里插入图片描述

2. 使用构造方法注入

在这里插入图片描述

但是奇怪的一点是:

日志打印并没有看到结果, 第一行的 @Autowired的结果 是个null

在这里插入图片描述

那是因为 注入时机 的问题

  1. 注入时机:在Spring容器初始化时,会先实例化bean,然后进行属性注入。在属性注入阶段,Spring会尝试使用@Autowired注解来注入成员变量。如果此时Map还未被完全初始化或者Map的值依赖于其他尚未初始化的bean,那么注入的Map可能是空的。而构造函数注入是在实例化bean的过程中进行的,所以构造函数中的map参数可能在Map被完全初始化后注入。

把这个 工厂注入到Controller类中, 调用一下方法再看下.

在这里插入图片描述
在这里插入图片描述

可以清楚的看到, 此时2种方式注入的Map 都是生效的, 包括List<Strategy> list 这种也是生效的. 

实现优雅注入.
;