您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
怎样系统学习Spring boot?
容器,注解,加载怎样系统学习Spring boot?
发布时间:2020-12-06加入收藏来源:互联网点击:
怎样系统学习Spring boot?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
关于Spring Boot ,曾经因为项目需求,“临阵磨枪”式的学习了 一下,但是,那时候自己使用相对简单,就做一些简单的API接口的开发。所以,就在网络上找了一些在线教程,结合看了一些快速入门的博客,把项目给搭建了起来。
最近由于疫情的原因,在家远程办公有了一些空闲时间,所以,就想着抽空把Spring更加细致的学习一遍。在这个过程中发现了一些不错的免费课程,所以来分享一下我关于Spring Boot 的学习思路,希望能够对有需要的朋友有所帮助。
Spring Boot
当学习一门技术时,我们要提前弄明白几个问题,
它是什么?为什么学?怎么样学?下面,我就从这3个方面来介绍一下Spring Boot。
Spring Boot是什么?
介绍Spring Boot之前需要简短的介绍一下Spring,因为它们是承前启后的关系,Spring Boot是发展自Spring的基础上,如果不明白Spring就贸然介绍Spring Boot会觉得云里雾里。
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。举个例子,它就类似于tensorflow之于机器学习,如果没有Spring,我们同样可以使用Java EE完成一项功能的开发,但是Spring的出现使JAVA EE开发更加容易。
Spring的核心包括2个概念:控制反转(IOC)和面向切面(AOP)。
而Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
为什么学Spring Boot?
前面简单的介绍了一句,Spring Boot的设计目的是为了简化Spring应用。
那也就是说Spring Boot是为了解决Spring的弊端而出现的,所以,这个问题又回到了Spring上面。
既然Spring不好用,那么不学不就行了?为什么还要重写设计出一个Spring Boot?
这里就需要首先了解一下为什么学习Spring?
下面通过一个简单的例子来说明一下。
假设一个场景:目前有三个角色,买水果的人(用户),卖水果的人(业务层),水果(持久化层),
先写一个接口,
public interface Fruit { public void get(); }
现在实现3种水果的类,为了方便展示,把它们先写在一起,
// Apple.java public class Apple implements Fruit{ public void get() { System.out.println("get an apple"); } } // Orange.java public class Banana implements Fruit{ public void get() { System.out.println("get a banana"); } } // Banana.java public class Orange implements Fruit{ public void get() { System.out.println("get a organe"); } }
现在实现一个业务层,也就是从3个水果类中获取水果,
// UserService.java public class UserService { private Fruit fruit = new Apple(); public void getFruit() { fruit.get(); } }
然后,实现一个用户类,
// User.java public class User { public static void main(String[] args) { UserService user = new UserService(); user.getFruit(); } }
上述就是我们实现一个程序的惯用方式,这样看上去没有什么问题,目前我们调用业务层UserService获取到苹果,那么试想一下,如果现在我想获取橘子怎么办?这样就需要修改业务层代码,
// UserService.java public class UserService { private Fruit fruit = new Orange(); public void getFruit() { fruit.get(); } }
也许很多同学会认为这样没什么问题,那就修改一下业务层代码啊?
显然,这不是一个优秀的程序员做的事情,每当用户需求做出改变时,我们的代码都要做出相应的修改,那么有两个问题,
如果工程量较大,修改的内容较多怎么办?如果我们修改代码对其他业务造成影响怎么办?所以,一个好的设计思路就应该在不改变原代码的基础上实现我们想要的功能。
那么,接下来就应该转变思维,考虑一下,目前的控制权在业务层,所以每次用户需求改变时,业务层也要跟着改变,既然这样,我们把控制权交给用户不就行了吗?
下面来修改一下业务层的代码实现控制权的转换,
public class UserService { private Fruit fruit; public void setFruit(Fruit fruit) { this.fruit = fruit; } public void getFruit() { this.fruit.get(); } }
细心的同学应该可以看得出改变,我在加了一个set方法,使得用户层可以注入不同的对象,这样我们在用户层传入哪个对象,就会获得哪个结果,
// 1. 获取橘子 public class User { public static void main(String[] args) { UserImpl user = new UserImpl(); user.setFruit(new Orange()); //在这里注入对象 user.getFruit(); } } //2. 获取香蕉 public class User { public static void main(String[] args) { UserImpl user = new UserImpl(); user.setFruit(new Banana()); user.getFruit(); } }
现在来总结一下,经过改变前后到底发生了什么,
上图展示的很明确,就是控制权的反转,之前主动权在业务层,每次用户提出需求业务层就需要跟着做出改变,现在我们把主动权交给了用户,它传进什么,就得到什么样的结果,这样业务代码就不用跟着改变了。
这就是IOC(控制反转)的核心思想。
IOC就是Spring中两个主要的概念之一,另外一个就是AOP(面向切面),它的主要思路应用动态代理,这里不详细展开。
读到这里就应该明白,我们在学习Python、Java、C++等编程语言的过程中,都会接触到运算符、变量类型、循环、条件、面向对象这些语法,而Spring Boot是高于这些语法之上,更高一层的思维方式的转变。
Spring并不像我们所学的基本语法那样的固定知识点一样,它是一种思维方式,通过这种思维方式的转变能够让项目开发更加简洁高效,这就是Spring的主要优点之一。
前面通过长篇大论介绍了Spring的核心和优点,那么现在来说一下它的缺点。
Spring在组件注入和装配过程中需要大量的配置,那么,随着项目的增大,那么就需要很多庞大的配置项,显然,这与Spring的初衷是相悖的。
所以,Spring Boot就以“习惯优于配置”的理念在Spring的基础上扩展而来,它不仅继承了Spring的优点,还实现了自动配置Spring,进一步简化了开发过程,这就是Spring Boot的优点之一,当然,它还有诸多其他优点,例如,
创建独立的Spring应用程序嵌入的Tomcat,无需部署WAR文件简化Maven配置自动配置Spring提供生产就绪型功能,如指标,健康检查和外部配置绝对没有代码生成和对XML没有要求配置怎么样学?
前面只是介绍了一下Spring中的一个重要概念IOC的本质和Spring、Spring Boot的优点,明确了它是什么?为什么学?这两个问题,那么接下来就来到了最后一个问题,怎么样学?
我所介绍的只是九牛一毛,Spring Boot包含很庞大的体系,有很多值得学习的,所以,如果真正对Java开发感兴趣的,我认为需要系统详细的学习一下。
上一篇:特朗普称沙特失踪记者“看上去确实”已经遇害,美国将准备制裁沙特吗?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |