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)限制和不足
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