遵循带着目的去看源码学习的规则,研究源码前先提出问题:
1 bean 注入方式 按照指定id注入 按照class的type注入
问题 如id重复 在同一个xml文件中会报错 在多个xml文件中在后面加载的bean 同一个id会覆盖之前加载的bean
2 配置bean 为什么需要class属性? 反射加载bean 是不是需要类的全限定名,也就是坐标?
3 property set注入 constructor-arg 构造器注入的源码实现
4 所有的bean交给Spring管理, Spring是如何管理bean的生命周期的?
5 Spring 对bean 创建和销毁前后的方法增强 (代理模式: 控制对象行为,装饰着模式: 包装对象,增强对象功能)
6 Spring 如何处理bean之间的依赖关系,循环引用的解决处理
7 子容器,父容器,子容器可访问父容器的资源但父容器不能访问子容器的资源。事物等配置在父容器中可全局使用
8
ClassPathXmlApplicationContext 会找 projectName/src/main/resources 下的路径开始 ApplicationContext.xml
FileSystemXmlApplicationContext 会从 projectName下的路径开始 /src/main/resources/ApplicationContext.xml
Spring 作为基础框架需要有以下特点:
1 好用
2 适用
3 容易扩展
4 容错
5 方便升级维护
实现方法: 1 配置文件 2 接口 (模板方法模式: 提供接口可抽象类实现基础方法,其他实现交给子类实现)
对Interface的理解:
1 接口是对某一类行为的高度抽象,说明了要做什么,没说如何去做。
2 接口间是隔离的(每个接口承担了某一类的独立完成功能)
3 定义一个接口集成多个接口 可以聚合多个接口的功能于一个接口。提供更强大便于使用的功能
4 如何看源码:
1 看顶层接口功能
2 看组合接口功能
3 看具体实现