zoukankan      html  css  js  c++  java
  • Spring(06)IOC 依赖注入

    Spring(06)IOC 依赖注入

    Spring 核心编程思想目录:https://www.cnblogs.com/binarylei/p/12290153.html

    1. 依赖注入的模式和类型

    1.1 依赖注入模式

    • 手动模式- 配置或者编程的方式,提前安排注入规则
      • XML 资源配置元信息
      • Java 注解配置元信息
      • API 配置元信息
    • 自动模式- 实现方提供依赖自动关联的方式,按照內建的注入规则
      • Autowiring(自动绑定):no、byName、byType、constructor

    1.2 依赖注入类型

    依赖注入类型 配置元数据举例
    Setter 方法 <proeprty name="user" ref="userBean" />
    构造器 <constructor-arg name="user" ref="userBean" />
    字段 @Autowired User user;
    方法 @Autowired public void user(User user) { ... }
    接口回调 class MyBean implements BeanFactoryAware { ... }

    2. 自动绑定(Autowiring)

    3. 自动绑定(Autowiring)模式

    模式 说明
    no 默认值,未激活Autowiring,需要手动指定依赖注入对象
    byName 根据被注入属性的名称作为Bean 名称进行依赖查找,并将对象设置到该属性
    byType 根据被注入属性的类型作为依赖类型进行查找,并将对象设置到该属性
    constructor 特殊byType 类型,用于构造器参数

    参考枚举:org.springframework.beans.factory.annotation.Autowire

    4. 自动绑定(Autowiring)限制和不足

    https://docs.spring.io/spring/docs/5.2.2.RELEASE/spring-framework-reference/core.html#beans-autowired-exceptions

    5. Setter 方法依赖注入

    • 手动模式
      • XML 资源配置元信息
      • Java 注解配置元信息
      • API 配置元信息
    • 自动模式
      • byName
      • byType

    6. 构造器依赖注入

    • 手动模式
      • XML 资源配置元信息
      • Java 注解配置元信息
      • API 配置元信息
    • 自动模式
      • constructor

    7. 字段注入

    • 手动模式 - Java 注解配置元信息
      • @Autowired
      • @Resource
      • @Inject(可选)

    8. 方法注入

    • 手动模式 - Java 注解配置元信息
      • @Autowired
      • @Resource
      • @Inject(可选)
      • @Bean

    9. 回调注入

    內建接口 说明
    BeanFactoryAware 获取 IoC 容器 - BeanFactory
    ApplicationContextAware 获取 Spring 应用上下文 - ApplicationContext 对象
    EnvironmentAware 获取 Environment 对象
    ResourceLoaderAware 获取资源加载器对象- ResourceLoader
    BeanClassLoaderAware 获取加载当前 Bean Class 的 ClassLoader
    BeanNameAware 获取当前 Bean 的名称
    MessageSourceAware 获取 MessageSource 对象,用于 Spring 国际化
    ApplicationEventPublisherAware 获取 ApplicationEventPublishAware 对象,用于 Spring 事件
    EmbeddedValueResolverAware 获取 StringValueResolver 对象,用于占位符处理

    10. 依赖注入类型选择

    11. 基础类型注入

    • 原生类型(Primitive ): boolean、byte、char、short、int 、float、long、double
    • 标量类型(Scalar ): Number、Character、Boolean、Enum、Locale、Charset、Currency、Properties、UUID
    • 常规类型(General ): Object、String、Timezone、Calendar、Optional
    • Spring 类型:Resource、Inputsource、Formatter

    12. 集合类型注入

    • 数组类型(Array ):原生类型、标量类型、常规类型、 Spring 类型
    • 集合类型(Collection )
      • Collection:List、Set(Sortedset、 NavigableSet、 EnumSet)
      • Map:Properties

    13. 限定注入

    • 使用注解 @Qualifier 限定
      • 通过 Bean 名称限定
      • 通过分组限定
    • 基于注解 @Qualifier 扩展限定
      • 自定义注解 - 如 Spring Cloud @Loadbalanced

    14. 延迟依赖注入

    • 使用 Objectfactory 延迟注入
      • 单一类型
      • 集合类型
    • 使用 Objectprovider 延迟注入(推荐)
      • 单一类型
      • 集合类型

    15. 依赖处理过程

    • 入口 - DefaultListableBeanFactory#resolveDependency
    • 依赖描述符 - DependencyDescriptor
    • 自定绑定候选对象处理器 - AutowireCandidateResolver

    16. @Autowired 注入原理

    @Autowired 注入过程:

    • 元信息解析
    • 依赖查找
    • 依赖注入(字段、方法)

    @Autowired 不支持 Java 原生类型注入,所以有了 @Value 注解

    Spring EL 表达式:https://blog.csdn.net/u011305680/article/details/80271423

    17. JSR-330 @Inject 注入原理

    18. Java 通用注解注入原理

    19. 自定义依赖注入注解

    20. 面试题精选

  • 相关阅读:
    String、StringBuilder、StringBuffer区别
    深拷贝和浅拷贝
    二叉查找树(一)
    二叉树的遍历
    二叉树
    递归
    队列

    数据结构基础
    视图
  • 原文地址:https://www.cnblogs.com/binarylei/p/12308201.html
Copyright © 2011-2022 走看看