SPRING TUTORIAL SPRING TUTORIAL
综合篇
核心篇
数据篇
Web篇
IO篇
集成篇
其他
GitHub (opens new window)
综合篇
核心篇
数据篇
Web篇
IO篇
集成篇
其他
GitHub (opens new window)
  • 框架

    • Spring

      • Spring综合

      • Spring核心

        • Spring Bean
        • Spring IoC
        • Spring 依赖查找
        • Spring 依赖注入
        • Spring IoC 依赖来源
          • 依赖查找的来源
          • 依赖注入的来源
          • Spring 容器管理和游离对象
          • Spring BeanDefinition 作为依赖来源
          • 单例对象作为依赖来源
          • 非 Spring 对象容器管理对象作为依赖来源
          • 外部化配置作为依赖来源
          • 问题
          • 参考资料
        • Spring Bean 作用域
        • Spring Bean 生命周期
        • Spring 配置元数据
        • Spring 应用上下文生命周期
        • Spring AOP
        • Spring 资源管理
        • Spring 校验
        • Spring 数据绑定
        • Spring 类型转换
        • Spring EL 表达式
        • Spring 事件
        • Spring 国际化
        • Spring 泛型处理
        • Spring 注解
        • Spring Environment 抽象
        • SpringBoot 之快速入门
        • SpringBoot 之属性加载详解
        • SpringBoot 之 Profile
      • Spring数据

      • SpringWeb

      • SpringIO

      • Spring集成

      • Spring安全

      • Spring其他

  • Java
  • 框架
  • Spring
  • Spring核心
dunwu
2022-12-20
目录

Spring IoC 依赖来源

# Spring IoC 依赖来源

# 依赖查找的来源

查找来源

来源 配置元数据
Spring BeanDefinition <bean id ="user" class="xxx.xxx.User">
@Bean public User user() {...}
BeanDefinitionBuilder
单例对象 API 实现

Spring 內建 BeanDefintion

Bean 名称 Bean 实例 使用场景
org.springframework.context.annotation.internalConfigurationAnnotationProcessor ConfigurationClassPostProcessor 对象 处理 Spring 配置类
org.springframework.context.annotation.internalAutowiredAnnotationProcessor AutowiredAnnotationBeanPostProcessor 对象 处理 @Autowired 以及 @Value 注解
org.springframework.context.annotation.internalCommonAnnotationProcessor CommonAnnotationBeanPostProcessor 对象 (条件激活)处理 JSR-250 注解,如 @PostConstruct 等
org.springframework.context.event.internalEventListenerProcessor EventListenerMethodProcessor 对象 处理标注 @EventListener 的 Spring 事件监听方法

Spring 內建单例对象

Bean 名称 Bean 实例 使用场景
environment Environment 对象 外部化配置以及 Profiles
systemProperties java.util.Properties 对象 Java 系统属性
systemEnvironment java.util.Map 对象 操作系统环境变量
messageSource MessageSource 对象 国际化文案
lifecycleProcessor LifecycleProcessor 对象 Lifecycle Bean 处理器
applicationEventMulticaster ApplicationEventMulticaster 对象 Spring 事件广播器

# 依赖注入的来源

来源 配置元数据
Spring BeanDefinition <bean id ="user" class="xxx.xxx.User">
@Bean public User user() {...}
BeanDefinitionBuilder
单例对象 API 实现
非 Spring 容器管理对象

# Spring 容器管理和游离对象

来源 Spring Bean 对象 生命周期管理 配置元信息 使用场景
Spring BeanDefinition 是 是 有 依赖查找、依赖注入
单体对象 是 否 无 依赖查找、依赖注入
Resolvable Dependency 否 否 无 依赖注入

# Spring BeanDefinition 作为依赖来源

  • 元数据:BeanDefinition
  • 注册:BeanDefinitionRegistry#registerBeanDefinition
  • 类型:延迟和非延迟
  • 顺序:Bean 生命周期顺序按照注册顺序

# 单例对象作为依赖来源

  • 要素
    • 来源:外部普通 Java 对象(不一定是 POJO)
    • 注册:SingletonBeanRegistry#registerSingleton
  • 限制
    • 无生命周期管理
    • 无法实现延迟初始化 Bean

# 非 Spring 对象容器管理对象作为依赖来源

  • 要素
    • 注册:ConfigurableListableBeanFactory#registerResolvableDependency
  • 限制
    • 无生命周期管理
    • 无法实现延迟初始化 Bean
    • 无法通过依赖查找

# 外部化配置作为依赖来源

  • 要素
    • 类型:非常规 Spring 对象依赖来源
  • 限制
    • 无生命周期管理
    • 无法实现延迟初始化 Bean
    • 无法通过依赖查找

# 问题

注入和查找的依赖来源是否相同?

否,依赖查找的来源仅限于 Spring BeanDefinition 以及单例对象,而依赖注入的来源还包括 Resolvable Dependency 以及 @Value 所标注的外部化配置

单例对象能在 IoC 容器启动后注册吗?

可以的,单例对象的注册与 BeanDefinition 不同,BeanDefinition 会被 ConfigurableListableBeanFactory#freezeConfiguration() 方法影响,从而冻结注册,单例对象则没有这个限制。

Spring 依赖注入的来源有哪些?

  • Spring BeanDefinition
  • 单例对象
  • Resolvable Dependency
  • @Value 外部化配置

# 参考资料

  • Spring 官方文档之 Core Technologies (opens new window)
  • 《小马哥讲 Spring 核心编程思想》 (opens new window)
📝 帮助改善此页面! (opens new window)
#Java#框架#Spring#IOC#依赖注入
上次更新: 2024/04/24, 07:33:33
Spring 依赖注入
Spring Bean 作用域

← Spring 依赖注入 Spring Bean 作用域→

最近更新
01
Spring MVC 之视图技术
02-17
02
Spring MVC 之跨域
02-16
03
Spring Web 应用
02-14
更多文章>
Theme by Vdoing | Copyright © 2019-2024 钝悟(dunwu) | CC-BY-SA-4.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×