springboot白话总结

文章目录

  • 1.springboot到底是个啥
    • 1.1假如你是县长
    • 1.2假如你是市长
    • 1.3假如你是省长
    • 1.4我理解的springboot
  • 2.springboot的原理
    • 2.1举个例子--在省长带领下创建欢迎网站
      • 2.1.1新建项目
      • 2.1.2指定页面显示内容
      • 2.1.3启动项目打开网址
    • 2.2springboot原理
  • 3.springboot的应用
    • 3.1在哪儿配置
      • 3.1.1全局配置文件
      • 3.1.2指定配置文件
      • 3.1.3引用spring现有的配置文件
      • 3.1.4外部配置文件
    • 3.2配置什么
      • 3.2.1参照官方文档
      • 3.2.2××Properties中有什么属性,就可以配置什么属性
    • 3.3怎么配置
    • 3.4springboot的应用
  • 4.结束语

本人是一个刚刚进入开发行业不就的菜鸟,因为工作需要,在仅有JavaSE浅薄基础的情况下学习了使用springboot进行项目开发。下面是我以尚属于外行人的身份对springboot做的粗浅总结。肯定有很多不对的地方,感谢指正。
本文尽可能的不出现专业术语和代码,希望仅仅用大白话来初步认识springboot。

1.springboot到底是个啥

把开发一个项目比喻成建设整个国家的话。若仅仅使用javaSE你就是个县长,若使用了spring mvc你就升市长了,若使用了spring boot恭喜你,你是省长了。
对应关系:

  • 省—整个项目的开发
  • 市—项目的数据库建设、后端开发、前端开发等部分
  • 县—数据库建设中的数据库连接、数据的增删改查、数据的存储等部分
  • 乡镇—数据库连接时用到的Java底层的类、接口等部分
    设每个省有n个市,每个市有n个县,每个县有n个配置项。

1.1假如你是县长

如果只使用javaSE,那么你相当于县长级别,可以到任何一个县当县长。但只是个刚刚及格的县长。所谓刚刚及格,就是说县以下的任务,你虽然不懂,但是官话套话一说,下面的人还是能给你办个八九不离十。那你下面的人是谁呢?就是Java底层的一些工具类和基本规则了。你可以在不懂某个方法(接口)内部实现原理的前提下调用它。
你这个县长每天的职务就是点一大堆的按钮,每个按钮就相当于一个乡长。
假如你是“数据库连接县”的县长,你可以指派张三去连接a数据库
具体操作如下:
(1)点击“张三”;
(2)点击“数据库连接配置2”
(3)点击“数据库连接配置3”

(n-1)点击"数据库连接配置n-1"
(n)点击“a数据库”。
搞定。

虽然你不懂张三具体是怎么按照你的配置连接数据库的,但这没有关系。
但是每个县你都要点n个按钮,n^2 个县,要点n^3次按钮,你要怀疑人生了。于是乎你直接指派一个属下,说:“去!给我把数据库连接工作做好!”
属下一脸懵逼:“领导,我不知道该怎么办啊?我要找谁去连接哪个数据库啊?,我得找多少个人去做连接工作啊?”言下之意就是说:“这些按钮都该你点,我要是帮你点了,我就是县长了。”
:“我不管我不管,现在按钮太多了,我点不过来,我是领导,要抓大放小,懂吗!”
属下:“我给您推荐个人吧,它能搞定这事儿。”
:“谁?”
属下:“spring mvc”

1.2假如你是市长

如果使用了spring mvc,那么你相当于市长级别,可以到任何一个市当市长。同样只是刚刚及格的市长。此时你面前仍然是一排按钮,但是按钮数量确实变少了,现在每个按钮就相当于一个县长啦。
此时你是“数据库建设市”的市长,你可以叫李四过来说:“去!给我把数据库连接工作做好!”。可以叫王五过来说:“去!给我把数据的存储工作做好!”
具体操作如下:
(1)点击“李四”;
(2)点击“数据库连接工作”;
(3)点击“王五”;
(4)点击“数据存储工作”;

(n)点击"数据库建设配置n"
搞定。

那么你叫过来的这个李四和王五是谁呢?------spring mvc的某个组件。
人的懒惰,呸,人的上进心是无止境的。
开心了没几天,你感觉点的按钮还是太多了,每个市要点n个按钮,n个市,一共是n^2个按钮,点多了还是头大。于是乎你直接指派一个属下,说:“去!给我把数据库建设工作做好!”
属下一脸懵逼:“领导,我不知道该怎么办啊?我要找谁派活儿啊?,我都要部署什么工作啊?”言下之意就是说:“这些按钮都该你点,我要是帮你点了,我就是市长了。”
:“我不管我不管,现在按钮太多了,我点不过来,我是领导,要抓大放小,懂吗!”
属下:“我给您推荐个人吧,它能搞定这事儿。”
:“谁?”
属下:“springboot”

1.3假如你是省长

如果使用了springboot,那么你相当于省长长级别,可以到任何一个省当省长。同样只是刚刚及格的省长。此时你面前仍然是一排按钮,但是按钮数量又变少了,现在每个按钮就相当于一个市长啦。此时你就可以叫赵六过来说:“去!给我把数据库建设工作做好!”。可以叫胡七过来说:“去!给我把后端开发工作做好!”
具体操作如下:
(1)点击“赵六”
(2)点击“数据库建设工作”;
(3)点击“胡七”
(4)点击“后端开发工作”;

(n)点击"项目搭建配置n"
搞定!

那么你叫过来的这个赵六和胡七是谁呢?------springboot的某个组件。
现在你要点击的按钮变成n个了。你终于可以开开心心的工作了。

1.4我理解的springboot

你踩着spring mvc和springboot的肩膀一步步爬上了省长的位置。那springboot就相当于市长的角色,干的就是市长的工作了。
springboot相当于一个模具,开发人员甚至可以在不理解为什么的情况下往模子中填入代码或文件即可。所有的项目都会有一些共同的组成部分,或者说,所有项目的大体组成部分是类似的。抽取公告的部分搭成一个架子,然后让开发者往架子里填入具体的东西相比从头一步步构建项目肯定更省时省力,对开发人员要求也更低。

2.springboot的原理

凭借springboot,你成了新晋的省长。但是新官上任,两眼一抹黑,啥也不懂啊。但是工作还得干不是?这个时候最有效的办法是啥?吩咐下属(也就是springboot),先不考虑优劣的问题,先解决有无的问题,照着别人的经验照搬一套过来。
所以说这个springboot就是照搬牛人经验搭建好的一套框架。框架由一个个格子组成,每个格子要放什么给你标清楚了,你只要往相应的格子里面放入对应的东西,放好之后,启动框架,binggo,项目可以正常运行了。

2.1举个例子–在省长带领下创建欢迎网站

使用IDEA一路只需要点点点加输入项目名称,就可以使用Spring Initializer快速创建一个Spring Boot项目。

2.1.1新建项目

新建一个web项目,指定存储位置,重命名项目;
然后项目就自动创建了,连主程序都帮你写好了,目录树结构如下
springboot白话总结_第1张图片

2.1.2指定页面显示内容

在src/main/java/com/atguigu/controller目录下新建HelloController.java
在该文件下填写具体内容

@RestController
public class HelloController {
    
    @RequestMapping("/hello")
    public String hello(){
        return "hello World!";
    }
}

2.1.3启动项目打开网址

点击启动按钮
在这里插入图片描述
发现项目启动
在这里插入图片描述
打开浏览器输入网址:localhost:8080/hello
springboot白话总结_第2张图片
就这样,虽然你一头雾水,搞不懂为啥我在IDEA里面写了个“hello World!”,就能在浏览器中显示了。启动的这个应用里面也没写怎么调用我写的HelloController类啊。但是这个项目在你的指导下完成了。

2.2springboot原理

一头雾水的你叫来springboot开始不耻下问。
:我只是在IDEA里面写了个“hello World!”,为啥在浏览器中能显示了
springboot:这种工作哪用得着您亲自费心,项目启动时我会自动读取项目路径下所有的类;
:项目启动的时候为啥会有日志打出来?我没设置日志啊?
springboot:这种工作哪用得着您亲自费心,日志我自己设置了;
:浏览器的网址端口号为啥是8080,我没设置啊?
springboot:这种工作哪用得着您亲自费心,端口号我自己设置了。
:可是我觉得8080这个数字不吉利,影响我升官啊
springboot:马上给您改,您在\src\main\resources\application.properties里面写上您想要的端口号就行

springboot白话总结_第3张图片
重启项目,输入网址:localhost:8081/hello
在这里插入图片描述
springboot:给您介绍一下我的工作原理:考虑到您日理万机,所以一个项目中您只需要把核心的指示下达到位就行了,其他的配置,比如端口号啊、日志啊等等我自己酌情处理就行。当然,如果您觉得我处理的不好,您随时下达指示,我都可以按照您的指示改。也就是说,对于一般的配置,只要您不指示,我就自己来,如果你指示,我就按照你的指示来。
您的指示既可以是粗略的指示,也可以是精确详细的指示。比如说:
您日志想用log4j,但是不知道具体什么版本合适,没关系,我自己配置合适的版本,这就是粗略的指示。

 
   org.springframework.boot</groupId>
   spring-boot-starter-log4j</artifactId>
</dependency>

如果您就是要指定具体的版本,也没关系,我就按照您指示的来,这就是精确详细的指示。

 
   org.springframework.boot</groupId>
   spring-boot-starter-log4j</artifactId>
   1.2.15</version>
</dependency>

当然这么多配置我自己一个人也搞不定,我有很多得力的属下。他们每个人都负责一个领域的自动配置。我把它们统一放在了项目类路径下的META-INF/spring.factories里面,项目启动时,用到哪个自动配置我就调用哪个自动配置。您看,每一个AutoConfiguration后缀都是一个自动配置类。

#Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\

所以,搭建一个项目所需要的繁琐的配置工作并不是没有干,而是springboot这个属下替你干了。

3.springboot的应用

知道了springboot的原理,你好开心,说,这下好啦,我就每天写个helloworld,剩下的交给springboot自己完成就行啦。
对不起,你想多了,springboot只是配置了一个通用的架构,针对具体的项目,默认的配置不一定是最优的,某些高级功能springboot也并没有对应的配置。所以,要想由合格省长变成优秀省长,你还需要学习springboot的配置细节,并尽可能根据项目的实际情况的指导springboot的每一步配置。

3.1在哪儿配置

想要参与springboot的配置,首先得知道在哪儿配置。

3.1.1全局配置文件

springboot使用全局配置文件,只要你在以下任一位置
springboot白话总结_第4张图片
创建application.properties或application.yml文件,里面写上你的配置,springboot就会自动去读取。
application.properties或application.yml是两种配置文件格式,配置的写法不一样。
比如指定端口号:
①yml写法

server:
    port: 8081

②properties写法

server.port=8081

3.1.2指定配置文件

若所有的配置都写在全局配置文件中,第一若配置越来越多,看着眼花。第二,也应该将与springboot无关的配置单独写。
自定义写的配置文件springboot就无法自动读取啦,这时需要使用@PropertySource注解,就是利用这个注解,告诉springboot我这里有个配置文件,你去读一下。

3.1.3引用spring现有的配置文件

spring的配置是.xml格式的,和springboot的配置文件格式不一样。如果想将spring的现有配置直接拿来使用,需要使用@ImportResource注解。

3.1.4外部配置文件

springboot还支持好多种加载外部配置文件的方法,也就是说,不写到项目代码里,通过外部方式加载配置文件。由于我是初学者,感觉目前还用不到,就忽略不研究吧。

3.2配置什么

知道了在哪儿配置之后就是配置什么的问题了。有以下两种方法。

3.2.1参照官方文档

打开官方文档网页后在PartX.Appendices中写了可以配置什么。
springboot白话总结_第5张图片

3.2.2××Properties中有什么属性,就可以配置什么属性

上面说到有一大堆后缀为AutoConfiguration的自动配置类,在IDEA中ctrl+N,然后输入某个自动配置类的类名,打开。会看的每个自动配置类都有@EnableConfigurationProperties注解
springboot白话总结_第6张图片
点击大括号里面的××Properties类,跳转,里面的属性就是可以配置的属性了。
springboot白话总结_第7张图片
prefix="spring.http"表示前缀,也就是说,你自己配置的时候,需要在配置文件中使用前缀进行配置,具体看下文。

3.3怎么配置

还是以上面的为例。
比如要配置logRequestDetails的值为true,则在全局配置文件application.properties中添加

spring.http.logRequestDetails=true

比如要配置Encoding方法里面的charset,则在全局配置文件application.properties中添加

spring.http.encoding.charset=UTF-8

Properties里面没有的属性是配置不了的。

3.4springboot的应用

知道了在哪儿配、配什么和怎么配之后。springboot的应用就变得明朗了。
springboot启动项目时会自动加载大量的配置,
(1)你要先去类路径下的META-INF/spring.factories里面查看所有的××AutoConfiguration
看现有的自动配置里面是否全部包含了你的需求,要是没有包含,对不起,你需要自己去搜索添加对应的***AutoConfiguration,找不到的话就需要自己新建了。
(2)再去××Properties里看现有配置的默认属性值是否符合项目
要是不符合,对不起,你需要在配置文件中更改属性值。

4.结束语

从合格省长到优秀省长有很长很长的路要走。
因为想要做好springboot的配置,就得全面了解每项配置的细节。也就是说你需要向管辖的每个市长一样,了解每个市内部的细节。了解完每个市的细节之后呢?就得再了解每个县,每个乡镇甚至每个村了。在你变成优秀省长的路上你会发现以前你偷懒甩的锅最后还得一个个背回来。只有深入基层历练过之后,你才能真正成为一个优秀的省长啊!

你可能感兴趣的:(springboot)