- 查Bean的config, 看依赖哪些其他类
- 递归的查看各个依赖的config, 直到最底层的类
- 然后回溯过程中, 从下向上new 实例, 并注入到上层的实例中
- 最终实现Bean实例的创建
- 创建注解
- 提取标记对象
- 实现IOC容器
- 实现依赖注入DI
- 基本与Spring原框架保持一直,最后悄悄能不能直接换用自己的框架
@Controller
@Service
@Repository
@Component
- 明确实现内容:提取有特定标记的对象,并将它们注册到容器中
-
读取配置中的扫描范围,范围由框架使用者提供
-
通过遍历,获取范围中的所有类
//基于package,获取该package下所有的类
public static Set<Class<?>> extraPackageClass(String packageName){
}
- 遍历所有类,获取将注解标记的类,并加载注册到容器中
-
默认将类名作为key,存储到容器中
-
容器的组成部分
- 保存class对象及其实例的载体
- 容器的加载
- 容器的操作方式
-
容器的加载
- 配置的管理与获取
- 获取指定范围内的class对象
- 依据配置获取class对象,并存入容器载体中
-
容器的增删改查
-
Spring框架的多种作用域
- singleton
- prototype
- request
- session
- globalsession
被加载到Bean容器中的Bean虽然被初始化了,但其某些字段依然还没有被实例化,需要通过依赖注入DI 的方式来为这些字段赋值。
- 实现思路
- 定义标记注解,标记那些需要注入的成员变量
- 基于注解标记,创建实例,并注入到对象中