第六章:Spring IoC 注入(2)
基础类型注入
基础类型:
• 原生类型(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 等
集合类型注入
集合类型
• 数组类型(Array):原生类型、标量类型、常规类型、Spring 类型
• 集合类型(Collection)
• Collection:List、Set(SortedSet、NavigableSet、EnumSet)
• Map:Properties
限定注入
• 使用注解 @Qualifier 限定
• 通过 Bean 名称限定
• 通过分组限定
• 基于注解 @Qualifier 扩展限定
• 自定义注解 - 如 Spring Cloud @LoadBalanced
依赖处理过程
• 使用注解 @Qualifier 限定
• 通过 Bean 名称限定
• 通过分组限定
• 基于注解 @Qualifier 扩展限定
• 自定义注解 - 如 Spring Cloud @LoadBalanced
@Autowired 注入原理
• 使用 API ObjectFactory 延迟注入
• 单一类型
• 集合类型
• 使用 API ObjectProvider 延迟注入(推荐)
• 单一类型
• 集合类型
依赖处理过程
基础知识
• 入口 - DefaultListableBeanFactory#resolveDependency
• 依赖描述符 - DependencyDescriptor
• 自定绑定候选对象处理器 - AutowireCandidateResolver
@Autowired 注入
• @Autowired 注入规则
• 非静态字段
• 非静态方法
• 构造器
• @Autowired 注入过程
• 元信息解析
• 依赖查找
• 依赖注入(字段、方法)
@Inject 注入
@Inject 注入过程
• 如果 JSR-330 存在于 ClassPath 中,复用 AutowiredAnnotationBeanPostProcessor 实现
Java通用注解注入原理
• CommonAnnotationBeanPostProcessor
• 注入注解
• javax.xml.ws.WebServiceRef
• javax.ejb.EJB
• javax.annotation.Resource
• 生命周期注解
• javax.annotation.PostConstruct
• javax.annotation.PreDestroy
自定义依赖注入注解
• 基于 AutowiredAnnotationBeanPostProcessor 实现
• 自定义实现
• 生命周期处理
• InstantiationAwareBeanPostProcessor
• MergedBeanDefinitionPostProcessor
• 元数据
• InjectedElement
• InjectionMetadata