@[TOC](第八章:Spring IoC 依赖注入(2))
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. 延迟依赖注入
• 使用 API ObjectFactory 延迟注入
• 单一类型
• 集合类型
• 使用 API ObjectProvider 延迟注入(推荐)
• 单一类型
• 集合类型
15. 依赖处理过程
• 基础知识
• 入口 - DefaultListableBeanFactory#resolveDependency
• 依赖描述符 - DependencyDescriptor
• 自定绑定候选对象处理器 - AutowireCandidateResolver
16. @Autowired 注入原理
• @Autowired 注入规则
• 非静态字段
• 非静态方法
• 构造器
• @Autowired 注入过程
• 元信息解析
• 依赖查找
• 依赖注入(字段、方法)
17. JSR-330 @Inject 注入原理
• @Inject 注入过程
• 如果 JSR-330 存在于 ClassPath 中,复用 AutowiredAnnotationBeanPostProcessor 实现
18. Java通用注解注入原理
• CommonAnnotationBeanPostProcessor
• 注入注解
• javax.xml.ws.WebServiceRef
• javax.ejb.EJB
• javax.annotation.Resource
• 生命周期注解
• javax.annotation.PostConstruct
• javax.annotation.PreDestroy
19. 自定义依赖注入注解
• 基于 AutowiredAnnotationBeanPostProcessor 实现
• 自定义实现
• 生命周期处理
• InstantiationAwareBeanPostProcessor
• MergedBeanDefinitionPostProcessor
• 元数据
• InjectedElement
• InjectionMetadata
20. 面试题精选
1、- 有多少种依赖注入的方式?
答:构造器注入
Setter 注入
字段注入
方法注入
接口回调注入
2、你偏好构造器注入还是 Setter 注入?
答:两种依赖注入的方式均可使用,如果是必须依赖的话,那么推荐使用构
造器注入,Setter 注入用于可选依赖。