依赖查找和依赖注入的来源区别

其实这两个的最大区别是,依赖注入的来源可以是非spring容器管理的对象


在refresh()启动容器的时候,会调用prepareBeanFactory()来初始化各种BeanFactory



在初始化过程过,会注册进去四个特殊的Bean,其不是由spring的IOC容器管理的(不会变为BeanDefinition),而是最终会put到一个名为resolvableDependencies的ConcurrentHashMap中作为缓存

上面写着 (and found for atuowiring) 意思是为了Autowired使用的,那么我们就看看autowired在哪使用它了



这一步是根据信息去IOC容器中找对应的Bean,并且注入到目标字段中


这个是重点

在findAutowireCandidates()这个方法中 

就是根据findAutowiringMetadata()方法中找到的被@Autowired修饰的字段或方法,在IOC容器中寻找对应的Bean

但是在这一步之前,它会先遍历resolvableDependencies这个map,判断被@Autowired修饰的字段或方法里有没有在这个map中的,如果有就不去IOC容器中找(容器里也没有,根本找不到),直接从map中获取其对象.

你可能感兴趣的:(依赖查找和依赖注入的来源区别)