Spring 源码探险01 概念

306 阅读3分钟

Spring意义:简化开发
Spring是面向Bean的编程,提供了IOC容器通过配置文件或者注解方式来管理对象之间的依赖关系。
IOC 控制反转,依赖注入
原本的类Test A=new Test(); A.get();、

这种实例化的控制权在我们手中,现在利用spring注解如@Autowired的方式spring初始化了这个对象,控制权反转到了spring手中。
IOC容器存储的是javabean

实现依赖注入,
@autowrite interfaceA a 自动把它实现类注入进来
@Resource(“aaa”) A b IOC容器中吧id为aaa自动注入到这里
@autowrite A a 根据类型自动注入

Spring注入方式
1 setter
2 构造方法
3 强制赋值

实例化的先后顺序 b a c
依赖链中的所有对象,ioc容器里面初始化

class C{
private A a;

public void fun(){
a.xxx();
}
}

Class A{

private B b;

}

面向切面AOP
先要把一个整体,拆分,分别开发,等到发布运行的时候再组装到一起运行。 拆分的规则就是切面,根据切面在无缝组装。 核心思想就是解耦

AOP完全融进了spring

Authentication 权限
Logging 日志
transction manager 事务
Lazy Loading 懒加载
context process 上下文处理
Error handler 错误跟踪(异常捕获机制)
cache 缓存

di 依赖注入
IOC 控制反转
AOP 面向切面
Spring 核心宗旨 :简化开发
AOP核心宗旨:解耦

用到了代理模式 CGLib动态代理
AOP:事务代理(声明式事务,哪个方法需要加事务,哪个方法不需要加事务) 日志监听 service 方法
开启事务open
事务的执行是由我们自己的代码完成
监听是否有异常,可能需要根据异常类型来决定事务是否回滚或者继续提交 commit rollback
事务要关闭close
蓝色都是动态代理完成的

Spring思想 应用场景 归纳
AOP 找出多个类中有一定规律的代码,开发时候拆开,运行时合并。面向切面编程,即面向规则编程 解耦,专人做专事
OOP 归纳总结生活中的一切事务。面向对象编程。 封装,继承,多态
IOC 把new对象的权利交给spring事务,并且由spring来保存已创建的对象 控制反转
DI/DL 依赖注入,依赖查找。spring不仅保存自己创建的对象还保存了对象与对象的关系。注入即赋值,主要是三种方式:构造方法,set,直接赋值 先理清关系再赋值
BOP 面向bean设计程序 一切从bean开始

俯瞰Spring架构设计
Spring总共大约有20个模块,由1300多个不同的文件构成。这些组件被分别整合到了核心容器(Core Container),AOP(Aspect Oriented programming)和设备支持(Instrmentation),数据访问及集成(Data Access、Integeration),web,报文发送(Message),Test, 6个模块集合中。
如下是Spring4的架构图

Spring依赖结构图

Spring源码学习路线图:从Spring-core入手,接着是spring-beans和spring-aop然后是spring-contest,然后是spring-tx和spring-orm 最后是spring-web和其他部分

源码下载:
第一步
github.com/spring-proj…

第二步
下载gradle
downloads.gradle.org/distributio…

第三步
解压,配置GRADLE_HOME 和Path

第四步
验证 gradle -v 环境变量是否正确

第五步
构建eclipse项目 gradle eclipse -x :eclipse
需要等待一段时间

第六步
引入到eclipse环境中