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