首页天道酬勤Springboot项目,springboot中文手册

Springboot项目,springboot中文手册

张世龙 05-06 05:37 122次浏览

目前的Spring相关开发都基于SpringBoot。

最后,可以填充打包时依赖的所有jar包,以配置独立的可执行jar包。 下图:

可以使用java -jar命令运行此独立的jar包。 下图:

此jar包的执行项是main函数,典型格式如下:

@ springbootapplicationpublicclasstastespringapplication (publicstaticvoidmain (string [ ] args ) springapplication.run }

从代码中可以看到,名为SpringApplication的类是SpringBoot的总入口。

这些内容已经为路人所熟知,这里是赘述一遍

进入名为SpringApplication的类的源代码后,首先可以看到一些应用程序上下文正在使用的类。

首先是annotationconfigapplicationcontext。 这是基于注释的非web APP应用程序所使用的类,是spring-context中的类,目前仍在SpringBoot中使用。

这表明,对于非web APP应用来说,是用传统的Spring构建,还是用当前的SpringBoot构建,核心部分没有本质的区别。 毕竟,连班都用同样的东西。

来看看,是anotationconfigservletwebserverapplicationcontext。 这是基于注释的web APP应用程序所使用的类。 请注意,这个类是SpringBoot的类。

事实上,众所周知,在没有SpringBoot的时候,基于传统的Spring构建web APP应用程序时使用的是名为annotationconfigwebapplicationcontext的类。

此类位于Spring-web上,显然是spring中的类。 (注意:本文中的Spring是指Spring框架。)

这里有问题。 您是否注意到从Spring到SpringBoot,不是web APP的类没有发生变化,web APP中使用的类也发生了变化? 为什么会这样呢?

这个问题其实很简单,可以从它们启动方法的不同来很好地说明。

用传统的Spring构建的web APP应用程序是位于tomcat下的war包。

启动tomcat后,tomcat将加载其下的web APP应用程序,即war包。

用SpringBoot构建的web APP应用程序是采用内置tomcat的jar包。

启动jar包时,它将进入SpringBoot并启动tomcat。

现在,SpringBoot负责启动和停止与传统Spring完全不同的web server,因此必须自行实现要在web应用程序上下文中使用的类。

由此可以推测,该类中一定有关于web服务器的启动和停止的内容。

让我们来看看另一个细节。 是的。 是类名。

传统Spring使用的类名可以提取Web这个关键字。 SpringBoot使用的类名可以提取的关键字是ServletWebServer。

前者表示只关注Web,后者表示除了Web之外还有Server,不仅关注Web,还关注服务器,即tomcat和jetty等Web服务器。

由此可知,来自类名的解释与来自启动方式的解释一致、一致。

这表明“如果总是关注细节,就会发现更多”。 这句话不仅可以用于工作,还可以用于学习和生活。

细心的同学还会注意到后者中还有一个servlet。 这个怎么解释?

这表明此web服务器是基于servlet实现的。 不是也有基于servlet的东西吗? 有。 它基于Reactive (响应式或反应式)。

响应表达式中使用的类是此annotationconfigreactivewebserverapplicationcontext。 请仔细比较一下名字。

Spring从5.x开始引入了响应编程。 这里不深入讨论,必要的话请去看一下“编程新说”这个号码前面的文章。

接下来去源代码,证实一下我们的预想吧。 进入servletwebserverapplicationcontext类正好是该类的

父类。

首先它定义了一个WebServer,如下图:


其次又创建了这个WebServer,如下图:


接着又启动了这个WebServer,如下图:


最后又关闭和释放了这个WebServer,如下图:


由此证明了我们的猜想,确实有关于web服务器的“全套”操作。

现在SpringBoot翻身成了主人,它不仅可以启停web服务器,还可以选择web服务器,是用tomcat、jetty还是netty,都是可以配置的。爽吧。


Spring的核心就是IOC容器,容器所作的事情就是bean定义的注册,bean的实例化、初始化、依赖的装配,bean方法的调用,bean实例的销毁。

我们先来看看bean定义的注册吧。

首先看下传统Spring的,也就是AnnotationConfigWebApplicationContext这个类的。

先定义两个成员变量,存储要注册的类和要扫描的包,如下图:


然后又用两个类AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner来负责注册类和扫描包,如下图:


最后就是具体的来执行注册类和扫描包,如下图:


接着再看下SpringBoot的,也就是AnnotationConfigServletWebServerApplicationContext这个类的。

也是先定义两个成员变量,和上面的如出一辙,如下图:


也是用相同的两个类来负责处理,如下图:



编程新说注:实例化时虽然调用的构造函数不同,但是最终执行的却是相同的构造函数。

最终执行具体的处理也是相同的,如下图:


由此可以看出传统Spring和SpringBoot在对待bean定义注册这一块,完全相同,没有任何区别。

其实这很好理解,IOC容器这块内容在Spring中已经发展的相当成熟了,是不会再有人轻易去修改它了。

因此SpringBoot和Spring在本质上没什么差别,注意这里说的是本质。

由于SpringBoot的启动方式是把自身提前把web服务器移后(即采用内嵌web服务器),所以这块是额外新增的内容。

由于SpringBoot采用根据条件(condition)自动配置的方式(AutoConfiguration),所以这块也是额外新增的内容。

这两块都是额外新增的内容,和传统Spring基本没啥关系。

因此在SpringBoot和Spring重叠的部分,其实本质没啥区别。

推荐阅读:

19年常问面试题汇总:JVM+微服务+多线程+锁+高并发性能(建议收藏)

SQL 查询语句总是先执行 SELECT?你们都错了

看完知乎轮子哥的编程之路,我只想说,收下我的膝盖。。。

年终考核不合格,单位有权开除我吗?

喜欢我可以给我设为星标哦

好文章,我 在看 

springboot注解有哪些,boot和bot的区别