| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring源码编译及阅读源码入门 -> 正文阅读 |
|
[Java知识库]Spring源码编译及阅读源码入门 |
我为什么要去读源码首先说明目前的我并不是什么大佬,普通公司的普通开发,那为什么我要去读源码呢? 其实不管是 Spring 还是 JDK 的源码,如果我们想要称为更高阶的开发者,阅读源码是必经阶段,第一可以提高自己的代码能力,因为个人觉得写好代码的最好方式就是看别人怎么写代码并学习,第二是提升自己后找到更好的工作,如果我们去看大厂的招聘要求基本都是要精通 Spring,实际上我们可能没办法做到精通,但至少可以确定自己的方向。 另外就是 Spring 在企业开发中基本上已经撑起了半边天,正如Spring 官网所说 我适合去读源码吗对于个问题,我觉得我应该有发言权,有看过我文章的同学应该都知道,我之前更过一部分JDK相关源码的文章,主要是 JUC 相关的,而且我是断层更新的,主要原因就是因为我看了 2 遍,第 1 遍去看的时候是处于离职状态,为了找工作所以去看的,但处于一个离职的场景和刚毕业 1 年,又是非科班,看起来相当吃力,本身自己就没写过多少代码,所以看别人的就更看不懂了。因此,对我来说,我可以尝试去看源码,是因为我给自己定义了以下的要求,并且可以达到:
通过什么方式去读源码最好的方式就是跟着官方文档,但官方文档都是英文,懂的都懂,所以一般可能都是通过去看书或者博客或者培训课程,我没办法说那种方式好,因为对于上班族而言,本来上班就够累还要去看书,动都不想动的。 我的方式是看视频,看别人的讲解来吸收并笔记下来,同时通过百度查找自己需要了解的问题。因为你说你去看源码,你根本不知道如何下手,从哪里看?这都是问题,所以需要去找适合自己的方式。 Spring 源码编译说了这么多,首先我们先把 Spring 源码拉下来再说,这里选择的版本为v5.2.8.RELEASE,或点击下载(提取码:3022)。 如果你完全不想去手动编译,或者按照下面的流程有问题又无法解决,这里提供已经编译好的源码,直接导入IDEA即可。 码云:https://gitee.com/javatv/spring-framework-5.2.8.-release.git 安装gradle由于Spring是基于gradle打包的,所以我们需要配置gradle,点击下载(提取码:336c)。 解压后配置环境变量:
然后通过dos命令执行: 修改settings.gradle文件添加如下代码:
修改gradle.properties文件替换为如下配置:
修改build.gradle文件第 279 行添加如下代码:
编译spring-oxm模块通过命令编译:
如果出现下面这种情况,需要在 build.gradle 文件下注释掉下面这行代码: 注释代码: IDEA导入Spring源码1、选择项目文件 2、导入 3、导入后等待编译 测试写个测试类测试模块是否导入正确,在spring-context包的test包下创建两个测试类。如下: TestConfig类:
TestMain类:
然后就可以断点运行测试了: 如果上面方式有问题,可以看这篇文章: Spring整体架构Spring框架是一种分层架构,它包含了一系列的功能,大概由20种模块组成。 这些模块分为核心容器(Core Container),数据访问/集成(Data Access/Integration), Web,AOP,工具(Instrumentation), 消息(Messaging), 测试用例(Test)。 模块介绍按照 Spring 的源码结构依次介绍 1、spring-aop 面向切面编程时使用。Spring通过"横切"的方式将贯穿于多业务中的公共功能独立抽取出来,形成单独的切面,并指定切面的具体动作,在需要使用该功能时,动态地将该功能切入到需要的地方。 2、spring-aspects 用来实现AspectJ框架的集成。而AspectJ是一个通过对java扩展出之后的框架,框架里面定义了AOP的语法,通过特殊的编译器完成编译期间的代码织入,最后生成增强之后的Class文件。 3、spring-beans 完成Spring框架的基本功能,里面定义了大量和Bean有关的接口,类及注解。例如:bean定义的顶层接口BeanDefinition、bean装配相关的注解Autowired/Qualifier/Value、用来创建bean的工厂接口BeanFactory及一些具体的工厂方法等。 4、spring-context 用来实现Spring上下文功能,及Spring的IOC,例如初始化Spring容器时所使用的ApplicationContext接口及常用的抽象实现类AnnotationConfigApplicatoinContext或者ClasspathXmlApplicationContext等。 5、spring-context-indexer 用来创建Spring应用启动时候选组件的索引,以提高应用的启动速度。通常情况下,应用启动的时候会去扫描类路径下的所有组件,但是如果组件特别多,会导致应用启动特别缓慢。该模块可以在应用的编译器对应用的类路径下的组件创建索引,在启动的时候通过索引去加载和初始化组件,可以大大提升应用启动的速度。 6、spring-context-support 用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存(定义了对下面几种缓存的支持:caffeine,ehcache,jcache)、定时任务调度等。 7、spring-core Spring的核心功能实现,例如:控制反转(IOC)、依赖注入(DI)、asm以及cglib的实现。 8、spring-expression 提供Spring表达式语言的支持,SPEL。 9、spring-framework-bom 通过该模块,可以解决Spring中的模块与其他框架整合时产生jar包版本的冲突,默认为空实现。 10、spring-instrument 实现Spring对服务器的代理接口功能实现,实现的是类级别或者ClassLoader级别的代理功能。 11、spring-jcl 通过适配器设计模式实现的一个用来统一管理日志的框架,对外体统统一的接口,采用"适配器类"将日志的操作全部委托给具体的日志框架,提供了对多种日志框架的支持。 12、spring-jdbc Spring对JDBC(Java Data Base Connector)功能的支持,里面定义了用于操作数据的多种API,常用的即:JdbcTemplate,通过模板设计模式将数据库的操作和具体业务分离,降低了数据库操作和业务功能的耦合。 13、spring-jms 对Java消息服务的支持,对JDK中的JMS API进行了简单的封装。 14、spring-messaging 实现基于消息来构建服务的功能。 15、spring-orm 提供了一些整合第三方ORM框架的抽象接口,用来支持与第三方ORM框架进行整合,例如:MyBatis,Hibernate,Spring JPA等。 16、spring-oxm Spring用来对对象和xml(Object/xml)映射的支持,完成xml和object对象的相互转换。 17、spring-test Spring对Junit测试框架的简单封装,用来快速构建应用的单元测试功能及Mock测试。 18、spring-tx Spring对一些数据访问框架提供的声明式事务或者编程式事务(通过配置文件进行事务的声明)的支持。例如:Hibernate,MyBatis,JPA等。 19、spring-web 用来支持Web系统的功能。例如:文件上传,与JSF的集成,过滤器Filter的支持等。 20、spring-webflux Spring5中新增的一个通过响应式编程来实现web功能的框架。内部支持了reactive和非阻塞式的功能,例如可以通过tcp的长连接来实现数据传输。webmvc的升级版,webmvc是基于servlet的,而webflux是基于reactive的。 21、spring-webmvc 用来支持SpringMVC的功能,包括了和SpringMVC框架相关的所有类或者接口,例如常用的DispatcherServlet、ModelAndView、HandlerAdaptor等。另外提供了支持国际化、标签、主题、FreeMarker、Velocity、XSLT的相关类。注意:如果使用了其他类似于smart-framework的独立MVC框架,则不需要使用该模块中的任何类。 22、spring-websocket Spring对websocket的简单封装,提供了及时通信的功能,常用于一些即时通讯功能的开发,例如:聊天室。 模块间依赖关系SpringCore模块
SpringAOP模块
SpringJDBC模块
SpringWeb
参考 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:00:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |