前面两篇文章讲Spring IOC 依赖注入和依赖查找的一些细节内容,那么无论是依赖注入 还是依赖查找 都有一个共同要涉及的问题就是依赖的来源。 本文我们来聊下两种方式依赖的来源以及有什么不同
以下是本篇文章讨论的内容: == 此处CSDN 今天上传图有点问题,明天再上传==
Spring IOC依赖的来源
一 依赖查找的来源
Spring BeanDefinition
?<bean id= “user” class=“org…User” ?@Bean public User user(){} ?BeanDefinitionBuilder
单例对象
?API 实现 ?内建BeanDefinition ?Environment ?systemProperties ?…
二 依赖注入的来源
非Spring 容器管理对象
?可以通过API 注入 ?不能用于依赖查找
Spring BeanDefinition
A:<bean id= “user” class=“org…User” B: @Bean public User user(){} C:BeanDefinitionBuilder
单例对象
A:API 实现 B : 内建BeanDefinition ? Environment ? systemProperties ? …
外部化配置
Spring 容器管理和游离对象
非 Spring 容器管理对象作为依赖来源
?A :要素 ?注册:ConfigurableListableBeanFactory# registerResolvableDependency ?B : 限制 ?无生命周期管理 ?无法实现延迟初始化 Bean ?无法通过依赖查找 🪐
Spring Bean Definition 作为依赖来源
A:要素
- 元数据:BeanDefinition
- 注册:BeanDefinitionRegistory # registerBeanDefinition
- 类型:延迟和非延迟
单例对象 作为依赖来源
A : 要素
- 来源:外部普通Java 对象(不一定是POJO)
- 注册:SingletonBeanRegistry # registerSingleton
B : 限制 - 无生命周期管理
- 无法实现延迟初始化Bean
外部化配置作为依赖来源
A : 要素
B: 限制
- 无生命周期管理
- 无法实现延迟初始化 Bean
- 无法通过依赖查找 🪐
C : 代码
- AutowiredAnnotationBeanPostProcessor # resolveDependency getSuggestedValue
- DefaultListableBeanFactory # doResolveDependency getSuggestedValue
对比
?单例对象作为依赖来源 ?外部化配置作为依赖来源
== 此处CSDN 今天上传图有点问题,明天再上传==
|