如何系统的学习Spring?如何正确地阅读源码?
▍如何系统的学习Spring?如何正确地阅读源码?
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。
因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。
Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
其次,无需多言,这张图表很好地解释了 Spring 在 Java 生态系统中的主导地位。10 开发人员中就有 4 能在其应用中使用 Spring Boot,而紧随其后的便是Spring MVC 框架。
Spring是什么意思?
现在,让我们一起来尝试下Spring 快速入门指南吧!
第一步:启动一个新的 Spring Boot 项目
利用启动.spring.io创建一个“网络”项目。在“依赖项”对话框中搜索并添加“web”依赖项,如屏幕截图所示。点击“生成”按钮,下载 zip,然后将其解压缩到计算机上的文件夹中。
创建的项目启动.spring.io包含弹簧靴,一个使 Spring 准备好在您的应用程序中工作的框架,但不需要太多代码或配置。Spring Boot 是启动 Spring 项目的最快和最流行的方式。
第 2 步:添加您的代码
在 IDE 中打开项目并在文件夹DemoApplication.java中找到该文件
src/main/java/com/example/demo。现在通过添加下面代码中显示的额外方法和注释来更改文件的内容。您可以复制并粘贴代码或直接输入。
hello()我们添加的方法旨在获取一个名为 的字符串参数name,然后将该参数与"Hello"代码中的单词结合起来。这意味着如果您“Amy”在请求中将您的姓名设置为,则响应将为“Hello Amy”.
@RestController注释告诉 Spring 这段代码描述了一个应该在 web 上可用的端点。@GetMapping(“/hello”)告诉 Spring 使用我们的方法hello()来回答发送到该
http://localhost:8080/hello地址的请求。最后,@RequestParam告诉 Springname在请求中期待一个值,但如果它不存在,它将默认使用单词“World”。
第 3 步:尝试一下
让我们构建并运行程序。打开命令行(或终端)并导航到您拥有项目文件的文件夹。我们可以通过发出以下命令来构建和运行应用程序:
macOS/Linux:
./mvnw spring-boot:run
视窗:
mvnw spring-boot:run
您应该会看到一些与此非常相似的输出:
这里的最后几行告诉我们春天已经开始了。Spring Boot 的嵌入式 Apache Tomcat 服务器充当 Web 服务器,并正在侦听localhostport上的请求8080。打开浏览器,在顶部的地址栏中输入http://localhost:8080/你好. 你应该得到一个很好的回应,如下所示:
Spring能做什么
微服务
微服务架构是“新常态”。构建小型、独立、可立即运行的应用程序可以为您的代码带来极大的灵活性并增加弹性。Spring Boot 的许多专用功能使您可以轻松地在生产环境中大规模构建和运行微服务。别忘了,没有微服务架构是不完整的春云‒ 简化管理并提高容错能力。
反应性
反应式系统具有某些特性,使其成为低延迟、高吞吐量工作负载的理想选择。Project Reactor 和 Spring 产品组合协同工作,使开发人员能够构建响应式、弹性、弹性和消息驱动的企业级反应式系统。
云
开发分布式系统可能具有挑战性。复杂性从应用层转移到网络层,需要服务之间更大的交互。使您的代码“云原生”意味着处理12因子诸如外部配置、无状态、日志记录和连接到支持服务等问题。Spring Cloud 项目套件包含使用应用程序在云中运行所需的许多服务。
网络应用程序
Spring 使构建 Web 应用程序变得快速而轻松。通过删除与 Web 开发相关的大部分样板代码和配置,您可以获得一个现代 Web 编程模型,该模型可以简化服务器端 HTML 应用程序、REST API 和基于事件的双向系统的开发。
无服务器
无服务器应用程序利用现代云计算功能和抽象让您专注于逻辑而不是基础设施。在无服务器环境中,您可以专注于编写应用程序代码,而底层平台负责扩展、运行时间、资源分配、安全性和其他“服务器”细节。
事件驱动
事件驱动的系统反映了现代企业的实际运作方式——每天都在发生成千上万的小变化。Spring 处理事件并使开发人员能够围绕它们构建应用程序的能力意味着您的应用程序将与您的业务保持同步。Spring 有许多事件驱动选项可供选择,从集成和流式传输一直到云功能和数据流。
批
批处理高效处理大量数据的能力使其成为许多用例的理想选择。Spring Batch 行业标准处理模式的实现使您可以在 JVM 上构建健壮的批处理作业。从 Spring 产品组合中添加 Spring Boot 和其他组件可让您构建任务关键性批处理应用程序。
重要提醒: Spring 中国教育管理中心已携手 VMware 全球最新 Spring技术和认证体系,帮助中国院校构建专业教学内容,全面赋能未来开发人。
Spring Professional认证旨在测试和验证学生对 Spring 和 Spring Boot核心方面的理解和熟悉程度,例如:配置、组件扫描、AOP、数据访问和事务、REST、安全、自动配置、执行器、 Spring boot测试等。
▍如何系统的学习Spring?如何正确地阅读源码?
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。我这里会分享一些学习Spring Boot的方法和干货,包括基础到进阶,按照本文的学习路线将会事半功倍,避免大家走了弯路导致浪费了大量时间,详见下文。
一. Spring Boot 是什么
我们刚开始学习 JavaWeb 的时候,使用 Servlet/JSP 做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,但是依然不方便。
再后来,我们引入 Struts2/SpringMVC 这一类的框架,来简化我们的开发 ,和 Servlet/JSP 相比,引入框架之后,生产力确实提高了不少,但是用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环境,环境搭建来搭建去,就是那几行配置,不同的项目,可能就是包不同,其他大部分的配置都是一样的。
Java 总是被人诟病配置繁琐代码量巨大,这就是其中一个表现。那么怎么办?Spring Boot 应运而生,Spring Boot 是 Pivotal 团队在 2013 年开始研发的一个基于 Spring 的全新框架,试图将 Spring 中臃肿的配置进行简化,使 Java 开发更加轻量与快速,这个框架非常活跃,官方也非常重视。
Spring Boot 主要提供了如下功能:
为所有基于 Spring 的 Java 开发提供方便快捷的入门体验。开箱即用,有自己自定义的配置就是用自己的,没有就使用官方提供的默认的。提供了一系列通用的非功能性的功能,例如嵌入式服务器、安全管理、健康检测等。绝对没有代码生成,也不需要XML配置。Spring Boot 的出现让 Java 开发又回归简单,因为确确实实解决了开发中的痛点,因此这个技术得到了非常广泛的使用,大概从 2017 年年初开始,Spring Boot 基本上面试必问,现在流行的 Spring Cloud 微服务也是基于 Spring Boot,因此,所有的 Java 工程师都有必要掌握好 Spring Boot。
从 Spring Boot 诞生的过程中,我们可以看到:
Spring Boot 并非另起炉灶,而是在现有的 Spring 框架的基础上整出来的,它把 Spring 中繁琐的配置进行了简化。Spring Boot 降低了 Spring 家族的使用门槛,使新手更易上手 Spring 框架。既然 Spring Boot 不是另起炉灶,那么 Spring Boot 学习要不要跳过 SSM 呢?听松哥来分析。二. 要不要跳过 SSM
这是很多人问我的一个问题,我的建议是:不要。
Spring Boot 基于 Spring,简单且容易上手,很多人想当然的跳过 SSM 直接上 Spring Boot。但是当我们细究 Spring Boot 中的自动化配置、条件注解、Java 配置等东西时,实在找不出太多新鲜玩意,Java 配置是 Spring3 开始提供的,条件注解 也是 Spring 中的东西,很多很多,都是 Spring 中就有的,只不过这些东西在 Spring Boot 时代大放异彩。
也就是说,即使你跳过了 SSM 直接去学习 Spring Boot,实际上还是在学习 Spring 中的东西,那既然这样,我们还不如坐下来,老老实实把 Spring 过一遍。
各个领域的开发工程师其实都会面临类似的问题,学习了一些优秀的封装框架之后,还有没有必要去学习底层?当然有必要!因为底层的东西可以让你深刻的理解你目前用的这个东西,也能让你在出问题时快速解决掉问题。
其实无论你想搞什么技术,都要有牢固的基础知识,这些牢固的基础知识就像肥沃的土壤,可以孕育出各种不同技术方向的牛人,基础掌握好了,学什么框架都快。今天你跳过 SSM 直接学了 Spring Boot,假如有一天 Spring Boot 不行了,Pivotal 团队又基于 Spring 框架搞了一个新的框架出来,那你是不是又要去学一遍?但是如果你一开始就掌握了 Spring 的各种用法,无论基于它搞出来什么样的框架,你都能快速上手。更进一步,如果你研究透了 Spring 中的 AOP、Ioc/DI,你会发现很多框架大同小异,核心思想就是这些东西,那么你在学习 Spring 之外的框架,就会容易很多。
三. 都要学哪些?
那么 Spring Boot 学习都要学哪些东西呢?我这里列举了一个进阶路线:
最基础的当然是 Spring/SpringMVC 相关的东西了。搭配各种页面模板的使用,例如 Jsp/Thymeleaf/Freemarker/Groovy Templates 等。和各种 SQL 数据库的整合,以及一些常见的数据持久化框架,例如 JdbcTemplate、MyBatis、Jpa 等。和各种 NoSQL 数据库的整合,例如 Redis、MongoDB、Elasticsearch 等。搭配安全管理相关的知识点,例如 Spring Security、Shiro 等。缓存的使用,例如 JCache、Ehcache 等。和消息中间件的搭配整合,如 ActiveMQ、RabbitMQ、Kafka 等。数据校验/定时任务/邮件发送等。各种监控的使用。结合 WebSocket 的使用。Spring Cloud 中相关组件。...上面这些只是我列出来的一些比较常见的技术点,每个技术点都还可以延伸出很多其他的东西,大家可以结合自己的情况,按照顺序一个一个来学,这里边还涉及到很多第三方的框架,例如 Redis、MongoDB、RabbitMQ 等,Spring Boot 的出现只是让这些组件在和 Spring 家族的产品整合时变得更加方便,但是并不会简化这些组件原本的用法,所以,该学 Redis、该学 MongoDB、该学 RabbitMQ 等等,还是一个不能少。以 Redis 为例,学会了 Redis,学会了 Spring 整合 Redis,再回过头来看 Spring Boot 整合 Redis,那简直太 easy 了。
当然,学习 Spring Boot 最终我们还是奔着快速开发和微服务去的,所以,像 Docker、Spring Cloud 等技术,也是需要去了解一下的。
四. 学习方法
1课程式学习:
主要多见于大学生、毕业找工作去培训学校或者自己在网络课程中学习的。课程式学习很有必要,能够获得稳定的知识结构,打下良好的基础。
2.碎片化时间学习
碎片化学习主要是利用课余时间,多见于上班族,课余利用上下班、晚上时间、周末时间来实现学习。
3.强化学习
这是个非常行之有效的方法,又可以叫魔鬼式训练、封闭式训练,在集中的时间内,人很容易突破自我极限,达到一种前所未有的高度。
4.项目式学习
就是项目上的需求,要求你用到 Spring Boot 来实现某个业务功能,而且有时间限制,要求你在某年某月某日完成,没办法,只能硬着头皮干下去。这种有收益、有目标、还动力的机会确实是人生中难得的,如果你喜欢这个目标,你可以立马扑上去。
5.随用随学
比如项目中用到mql,那么搜索下罗相关的知识,搭建demo测试用例,然后在项目中实践。
哪种方式更为适合,需要根据各个人的情况来看项目评估如下:
有人带着你学习看着你学习>自己学习项目学习>非项目学习强化学习>非强化学习五. 学习资源
【入门-基础】
Spring Boot 快速入门Spring Boot 基础f="">微服务构建: Spring Boot【入门-缓存】
>SpringBoot 中应该怎样使用 Redisef="">Redis 事务在 SpringBoot 中的应用href="">优化 Redis 的使用策略【入门-实践】
3分钟快速搭建Spring Boot开发环境Spring Boot 最佳实践(一)快速入门Spring Boot 最佳实践(二)集成Jsp与生产环境部署Spring Boot 最佳实践(三)模板引擎FreeMarker集成Spring Boot 最佳实践(四)模板引擎Thymeleaf集成Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8【进阶-Web进阶】
Spring Boot统一异常处理Spring Boot Web 应用性能优化基于Spring Boot快速开发RESTful风格API接口【进阶-实例】
基于Spring Boot实现图片上传/加水印一把梭操作Spring Boot日志框架实践Spring Boot 集成 MyBatis和 SQL Server实践Spring Boot中使用定时任务Spring Boot 一分钟拥有支付宝支付功能六. 学完Spring Boot基础之后如何进阶提升?
1.springsession实战
Spring Session 是Spring家族中的一个子项目,它提供一组API和实现,用于管理用户的session信息,它把servlet容器实现的httpSession替换为spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中。
2.RabbitMQ
RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现。采用该技术,我们可以实现异步处理、流量削峰、系统解耦。
3.Nginx实战应用
国内有大量网站使用Nginx,比如:百度、京东、新浪、网易、腾讯、淘宝等。由于在日常工作中,我们不可避免地要接触和使用这样一款高性能的web服务器,所以我们非常有必要学习和掌握Nginx。
4.FastDFS详解
FastDFS为互联网量身定制,简单、灵活、高效,采用C语言开发,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。。
我觉的学好Spring Boot主要还是得有一个持续性学习的态度,然后结合我上面的从Spring Boot基础到进阶,一直坚持不懈的学习下去,百分百会精通Spring Boot的!
本文分享自华为云社区《【云驻共创】Spring Boot要如何学习?》,作者:黎燃。
▍如何系统的学习Spring?如何正确地阅读源码?
如何系统的学习Spring,以我15年J2EE教学和开发经验来说,首先要清楚Spring的概念和特性,以及在JavaEE框架中起到的作用。在此基础上再开展学习。(欢迎转发)
(1) Spring概念
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,确保开发的简单性、可测试性和松耦合性;同时提供更多的企业应用功能
范围: Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益
(2)Spring特性
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。不管是SSH,还是SSM,都是由Spring通过IOC和AOP来对对象和对象组装关系进行统一管理。所以学好Spring,就是要学好IOC和AOP。看代码,看Spring源码,都是以这两者为核心。
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类和接口。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
面向切面——Spring提供了面向切面编程(AOP)的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如权限、日志和事务管理等)进行内聚性的开发。应用对象只实现它们应该完成的业务功能,不考虑其它的系统级关注点,例如日志或事务支持。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,可以配置每个bean如何被创建(bean可以创建一个单独的实例或者每次需要时都生成一个新的实例),以及它们是如何相互关联的。
框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
(3)Spring带来了复杂的J2EE框架开发的春天。
Spring具有如下优点:
低侵入式设计,代码的污染度低;
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere;
Spring的IoC容器降低了业务对象的耦合性;
Spring的AOP支持允许将一些通用的功能(权限、事务、日志等)等集中处理,提升了复用性,同时让开发者集中精力于业务功能的处理实现;
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问;
Spring是高度开放的,开发者可以自由选择Spring框架的部分或全部。
(4)目前最流行的Java EE开发框架是SSM,这时就需要以Spring为核心配置与管理工具,掌握spring和spring-mvc进行整合,Spring和mybatis进行整合与配置的方法。才能从容进行基于SSM的Java EE项目的开发。
(5)SpringBoot
目前很火的SpringBoot也是以Spring为基础,它是主要面向web服务,也就是微服务开发的。这个又是另外一个话题了。先学好Spring没错的。
刘嵩
2020.5.19
▍如何系统的学习Spring?如何正确地阅读源码?
spring简介:是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 j2ee 应用程序开发提供集成的框架。
spring学习方法:
一、首先java的基础、面向对象的基础和设计模式的基础知识是必不可少的。 关于设计模式我觉得不用学太多,但以下三个模式是学习spring必不可少的:factory模式(包括简单工厂和抽象工厂), 策略模式,模板方法模式。如果不掌握这些你就根本没法领悟spring的精髓,只能依样画葫芦地照搬,这是很可怕的事。 我这里强烈建议的书可能让人有点意外,那就是expert one on one j2ee design and development的第四章,这一章不仅仅是spring初学者,而是任何搞java开发的人必读的一章。经典!
二、接下可以看一些spring的入门书籍 其实我自己没怎么看过这方面的书,我当时只看过spring的reference,不过现在这方面的书好象多的是,而spring reference看起来还是有些吃力的。入门书应该是spring live或spring in action。
三、研究几个用spring做的开源项目 理论还是要与实际结合,所以看完书后是要看实际的项目的。很多人喜欢appfuse,我觉得appfuse花的东西太多,真正实质性的内容又太少。我更喜欢spring自带的jpetstore,这是一个非常完整的例子,看完后spring的基本用法应该都能掌握。四、开始做实际的项目 在上述这些都完备以后,我觉得应该要去实际项目中锻炼了。当然并不是每人都有这样的机会的,这时只能自己做个玩具项目啦。项目的锻炼是非常关键的,其实每个人都清楚,我就不重复了。
五、继续深入学习 经过项目的锤炼,对spring的用法和原理有了一定的了解的时候,才有可能真正掌握spring的精髓。这时要读的书才是rod johnson的三本经典名著,分别是: expert one on one j2ee design and development expert one on one j2ee without ejb professional java development with springframework 前两本书的经典程度我就不说了,只有读了它们,才能真正了解spring的设计意图,掌握spring的精髓。 第三本书是我强烈不建议初学者读的书。里面的东西深入而全,但是原理讲解得又不够深,很容易让初学者犯迷糊。但是却是spring的高级用户必读的一本书。
六、分析源代码,扩展spring 有人认为没有必要分析spring的源代码,因为这是很累人又不计好的事。但是要想成为spring的高级用户,这是必经的阶段。在学习的过程中,我们学到的不仅是spring,更重要的是他的设计思想。不管怎样,看牛人的源代码是绝对有好处的。不过这是一个很累人的过程,要有思考准备。
▍如何系统的学习Spring?如何正确地阅读源码?
年轻人,不要卷了
------------------
推荐阅读:
140平米一楼带前后花园(前50后40),花园应该怎么利用最好?
一年一度的查体报告中,出现肺上有磨玻璃结节的人怎么这么多啊?