spring源码笔记!从入门到源码讲解,让你真正读懂看懂源码
本篇主要内容[*]Spring 概述(根本情况)
[*]核思想 IoC 和 AOP
[*]写实现 IoC 和 AOP(定义spring框架)
[*]Spring IoC 级应
[*]基础知识
[*]级特性
[*]Spring IoC 源码深度剖析
[*]设计常优雅
[*]设计模式
[*]注意:原则、法和本事
[*]Spring AOP 级应
[*]声明式事件控制
[*]Spring AOP 源码深度剖析
[*]须要的条记、须要的图、通俗易懂的语化解知识难点
Spring 概述
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了显现层 SpringMVC 和业务层事件管理等众多的企业级应技能,还能整合开源世界众多著名的第三框架和类库,已经成为使最多的 Java EE 企业应开源框架。
Spring 发展历程
[*]1997年 IBM 提出了EJB的思想;
[*]1998年,SUN 制定开辟尺度规范EJB1.0;
[*]1999年,EJB 1.1发布;
[*]2001年,EJB 2.0发布;
[*]2003年,EJB 2.1发布;
[*]2006年,EJB 3.0发布;
[*]2017 年 9 份发布了 Spring 的最新版本 Spring 5.0 通版(GA)
Spring 的优势
[*]便解耦,简化开辟
[*]AOP编程的持
[*]声明式事件的持
[*]便步伐的测试
[*]便集成各种良好框架
[*]降低JavaEE API的使难度
[*]源码是经典的 Java 学习范例
Spring 的核布局
Spring是个分层常清晰并且依赖关系、职责定位常明确的轻量级框架,主要包罗个模块:数据处理模块、Web模块、AOP(Aspect Oriented Programming)/Aspects模块、Core Container模块和 Test 模块,如下图所示,Spring依靠这些根本模块,实现了个令愉悦的融合了现有解决案的零侵的轻量级框架。
https://p1.pstatp.com/large/pgc-image/c8b3030fead24029a409883fe5914787
[*]Spring核容器(Core Container) 容器是Spring框架最核的部分,它管理着Spring应中bean的创建、配置和管理。在该模块中,包罗了Spring bean,它为Spring提供了DI的功能。基于bean,我们还会发现有多种Spring应上下的实现。全部的Spring模块都构建于核容器之上。
[*]向切编程(AOP)/Aspects Spring对向切编程提供了丰富的持。这个模块是Spring应体系中开辟切的基础,与DI样,AOP可以帮助应对象解耦。
[*]数据访问与集成(Data Access/Integration)Spring的JDBC和DAO模块封装了量样板代码,这样可以使得数据库代码变得轻便,也可以更专注于我们的业务,还可以避免数据库资源释放失败引起的问题。 另外,Spring AOP为数据访问提供了事件管理服务,同时Spring还对ORM进了集成,如Hibernate、MyBatis等。该模块由JDBC、Transactions、ORM、OXM 和 JMS 等模块组成。
[*]Web 该模块提供了SpringMVC框架给Web应,还提供了多种构建和别的应交互的远程调案。 SpringMVC框架在Web层提升了应的松耦合平。
[*]Test 为了使得开辟者能够很便的进测试,Spring提供了测试模块以致于Spring应的测试。 通过该模块,Spring为使Servlet、JNDI等编写单元测试提供了系列的mock对象实现。
什么是IoC?
[*]IoC Inversion of Control (控制反转/反转控制),注意它是个技能思想,不是个技能实现描述的事情:Java开辟领域对象的创建,管理的问题
[*]传统开辟式:如类A依赖于类B,通常会在类A中new个B的对象
[*]IoC思想下开辟式:我们不去new对象了,是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使哪个对象,去问IoC容器要即可我们丧失了个权利(创建、管理对象的权利),得到了个福利(不考虑对象的创建、管理等系列事情)
为什么叫做控制反转?
[*]控制:指的是对象创建(实例化、管理)的权利
[*]反转:控制权交给外部环境了(spring框架、IoC容器)
IoC解决了什么问题
[*]IoC解决对象之间的耦合问题
IoC和DI的区别
[*]DI:Dependancy Injection(依赖注)
怎么理解:
[*]IOC和DI描述的是同件事情,只不过度不样罢了
什么是AOP
[*]AOP: Aspect oriented Programming 向切编程/向编程
[*]AOP是OOP的延续,从OOP提及
[*]OOP三特征:封装、继承和多态
[*]oop是种垂直继承体系
AOP在解决什么问题
在不改变原有业务逻辑情况下,加强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
为什么叫做向切编程
[*]「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,以是向横切逻辑
[*]「」:横切逻辑代码通常要影响的是很多个法,每个法都如同个点,多个点构成,有个的概念在
Spring IOC源码深度剖析
好处:
提造就代码架构思维、深理解框架
原则
定焦原则:抓主线
宏观原则:站在上帝视,关注源码布局和业务流程(淡化具体某代码的编写细节)
读源码的法和本事
断点(观察调栈)
反调(Find Usages)
经验(spring框架中doXXX,做具体处理的地)
Spring源码构建
下载源码(github)
安装gradle 5.6.3(类似于maven) Idea 2019.1 Jdk 11.0.5
导(耗费定时间)
编译程(顺序:core-oxm-context-beans-aspects-aop)
程—>tasks—>compileTestJava
Spring IoC的容器体系
IoC容器是Spring的核模块,是抽象了对象管理、依赖关系管理的框架解决案。Spring 提供了很多的容器,其中 BeanFactory 是顶层容器(根容器),不能被实例化,它定义了全部 IoC 容器 必须服从的套原则,具体的容器实现可以增长额外的功能,如我们常到的ApplicationContext,其下更具体的实现如 ClassPathXmlApplicationContext 包含了剖析 xml 等系列的内容,AnnotationConfigApplicationContext 则是包含了注解剖析等系列的内容。Spring IoC 容器继承体系常聪明,需要使哪个层次哪个层次即可,不必使功能全的。BeanFactory 顶级接法栈如下
https://p1.pstatp.com/large/pgc-image/1c84d1d728e44943a5dcbb2c440e94d5
BeanFactory 容器继承体系
https://p3.pstatp.com/large/pgc-image/b3155c05012d4da698651831ec3c7a02
Spring AOP 应
在讲解AOP术语之前,我们先来看下下这两张图,它们就是第三部分案例需求的扩展(针对这些扩展的需求,我们只进分析,在此基础上去进步回首AOP,不进实现)
https://p1.pstatp.com/large/pgc-image/d8ef8eb83ced4133854f74017ac978f7
上图描述的就是未采AOP思想设计的步伐,当我们红框中圈定的法时,会带来量的重复劳动。步伐中充斥着量的重复代码,使我们步伐的独性很差。下图中是采了AOP思想设计的步伐,它把红框部分的代码抽取出来的同时,运动态代理技能,在运期对需要使的业务逻辑法进加强。
https://p3.pstatp.com/large/pgc-image/c14d91cd0b32444dac49cab68a3fb3e2
AOP 术语
https://p9.pstatp.com/large/pgc-image/03fb332a03c64a4ca4f2dec350fd426b
Spring中AOP的代理选择
Spring 实现AOP思想使的是动态代理技能
默认情况下,Spring会根据被代理对象是否实现接来选择使JDK还是CGLIB。当被代理对象没有实现任何接时,Spring会选择CGLIB。当被代理对象实现了接,Spring会选择JDK官的代理技能,不过我们可以通过配置的式,让Spring强制使CGLIB。
Spring中AOP的配置式
[*]在Spring的AOP配置中,也和IoC配置样,持3类配置式。
[*]第类:使XML配置
[*]第类:使XML+注解组合配置
[*]第三类:使纯注解配置
Spring中AOP实现
需求:横切逻辑代码是打印志,希望把打印志的逻辑织到标法的特定位置(service层transfer法)
总结
感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞!
由于篇幅原因只能画出这些重点先讲一下,这一整套条记我已经整理成了PDF文档,具体如下:
https://p1.pstatp.com/large/pgc-image/2d0440c6db9e45009ae04074ede09e9c
资料获取方式:转发和批评这篇文章,然后关注小编,后台私信【java】即可打包带走全部资料~
https://p1.pstatp.com/large/pgc-image/9e4318ae8b714b6f870d2a2fe6afb805
页:
[1]