Spring IoC 依赖来源
2022-08-09 13:32:24 7 举报
AI智能生成
Spring IoC 依赖来源分析
作者其他创作
大纲/内容
依赖查找的来源
Spring BeanDefinition
<bean id="user" class="org.geekbang...User">
@Bean public User user(){...}
BeanDefinitionBuilder
单例对象
API 实现
Spring 內建 BeanDefintion
内建依赖
Spring 內建单例对象
内建单例对象
依赖注入的来源
依赖注入的来源包括依赖查找的来源
非 Spring 容器管理的 Bean
@Value 标注的外部化配置
Spring 容器的管理对象和游离对象
Spring容器的管理对象和游离对象(Resolvable Dependency)对比
Spring BeanDefinition 作为依赖来源
要素
元数据
BeanDefinition
注册
BeanDefinitionRegistry#registerBeanDefinition
类型
延迟和非延迟
顺序
Bean 生命周期顺序按照注册顺序
单例对象作为依赖来源
要素
来源:外部普通 Java 对象(不一定 POJO )
注册:SingletonBeanRegistry#registerSingleton
限制
无生命周期管理
无法延迟初始化 Bean
单例对象的依赖查找
单例对象的依赖查找流程,相对于 Spring BeanDefinition 来说更加简单,找到对象以后进行返回即可。没有生命周期的管理。
非 Spring 容器管理对象作为依赖来源
要素
注册:ConfigurableListableBeanFactory#registerResolvableDependency
限制
无生命周期管理
无法实现延迟初始化 Bean
无法通过依赖查找,也不能根据名称进行依赖注入,只能根据类型依赖注入
使用示例
Spring 中注入案例
外部化配置作为依赖来源
要素
类型:非常规 Spring 对象依赖来源
限制
无生命周期管理
无法实现延迟初始化 Bean
无法通过依赖查找
案例
配置文件
使用demo
源码分析
DefaultListableBeanFactory#doResolveDependency
AbstractBeanFactory#resolveEmbeddedValue
面试题精选
注入和查找的来源是否相同
否,依赖查找的来源仅限于 Spring BeanDefinition 以及单例 对象,而依赖注入的来源还包括 Resolvable Dependency 以及 @Value 所标注的外部化配置
单例对象能在 IoC 容器启动后注册吗?
可以的,单例对象的注册与 BeanDefinition 不同,BeanDefinition 会被 ConfigurableListableBeanFactory#freezeConfiguration() 方法影 响,从而冻结注册,单例对象则没有这个限制。
Spring 依赖注入的来源有哪些?
Spring BeanDefinition
单例对象
Resolvable Dependency
@Value 外部化配置
0 条评论
下一页