userObjectFactory; // ObjectFactory 延迟注入
```
### 1.9. 依赖处理过程

### 1.10. @Autowired注入规则和原理
`AutowiredAnnotationBeanPostProcessor`
`@Autowired`注入过程:
- 元信息解析。
- 依赖查找。
- 依赖注入(字段、方法)。
### 1.11. Java 通用注解
`CommonAnnotationBeanPostProcessor`。
注入注解:
- javax.xml.ws.WebServiceRef。
- javax.ejb.EJB。
- javax.annotation.Resource。
生命周期注解:
- javax.annotation.PostConstruct。
- javax.annotation.PreDestroy。
### 1.12. 自定义DI注解
```java
/**
* 扩展DI的最优方式: 这样实现新旧注解都可以使用
*
* static 静态注入会对 Bean 注入优先级做提升
*/
@Bean
@Order(Ordered.LOWEST_PRECEDENCE - 3)
public static AutowiredAnnotationBeanPostProcessor beanPostProcessor() {
AutowiredAnnotationBeanPostProcessor beanPostProcessor =
new AutowiredAnnotationBeanPostProcessor();
// 替换原有的注解处理, 使用新注解 @Injected
beanPostProcessor.setAutowiredAnnotationType(Injected.class);
return beanPostProcessor;
}
```
### 1.13. 面试题
#### 13.1. 多少种依赖注入方式
构造器注入、Setter注入、字段注入、方法注入、接口回调注入。
#### 13.2. 你偏好构造器注入还是 Setter 注入
两种依赖注入的方式都可以用,如果必须依赖的话,那么推荐构造器注入,Setter 注入用于可选依赖。
### 13.3. Spring依赖注入来源
# 五、Spring IoC 依赖来源
## 1. 依赖查找的来源
Spring BeanDefinition:配置元数据
- ``。
- `@Bean public class User user() {}`。
- `BeanDefinitionBuilder`。
单例对象:`API` 实现。

## 2. 依赖注入来源

# 九、Spring Bean生命周期