springboot框架流程图(【springboot 入门篇】第3篇 从controller开始学起)

本文目录
- 【springboot 入门篇】第3篇 从controller开始学起
- 运行springboot有哪几种
- springBoot是什么
- 【每天学点Spring】Spring以及Spring Boot框架知识图谱
- springboot启动流程是什么
- 如何创建一个spring boot框架
- Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC
- 从零开始新建Springboot项目之项目启动(一)
- 一图看懂Spring Boot 异步框架
【springboot 入门篇】第3篇 从controller开始学起
在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据。
返回一个页面,我们需要用到一些模板引擎,比如熟知的jsp,模板引擎后面会详细讲解。
返回数据一般会选择返回json数据,我们之前的demo项目中使用的@RestController就是一个返回数据的注解。
spring-boot 支持多种模版引擎包括:
我们在讲前后端分离之前,都会使用Thymeleaf模板引擎,先简单的介绍一下它。
Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。
Thymeleaf还提供了额外的木块与spring mvc集成,所以使用ssm框架的也可以使用这个模板引擎。
接下来,我们通过一个项目,来实践一下两种不同的返回结果。
先看一下最终的目录结构:
这里我们使用了Thymeleaf模板引擎来获得后台传来的数据并解析,使用bootstrap框架显示数据。可以看到,Thymeleaf的用法和jsp还是有点像的。可以直接通过${}的形式来获得attribute中的数据。
可以看到,我们成功的在前端获取到了数据。方式就是将数据保存在attribute中,然后再前端页面获取。
我们修改了注解,发现结果变了,直接显示了“index”,是因为@RestController会直接返回数据,而不是渲染页面,所以直接返回了index(这个index,是return语句中的)
***隐藏网址***
获得了json格式的数据
***隐藏网址***
列表也可以直接渲染为json。
***隐藏网址***
***隐藏网址***
会发现这两个都报错了,因为@Controller注解是渲染视图的,而我们返回的是对象或者集合,不能完成正常的渲染。
本文主要讲解了spring boot 如何渲染视图和数据,讲解了@Controller和@RestController的区别与用法。如果有什么疑问,请及时联系我。
我之前写过一个重新认识java系类(还没写完,会写完的。。),篇幅很长,每一篇文章多的有7、8千字,和多人抱怨说看到一半就不想看了,因为太长了,所以 spring boot 这个系类会尽量的短小精悍,每篇文章只讲一个知识点,这样看着不累~
运行springboot有哪几种
配置bean的源,就是bean的来源,就是注解了SpringBootApplication的那个类。推断,推断应用类型,有webflux,webservlet,none推断主类,这个是通过线程堆栈实现,构造一个运行时异常,找异常堆栈里面找mian所在的那个类。 网上大多数的解决方案是通过添加spring-boot-starter-tomcat依赖来解决,但实测证明此方法不可行。 首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于SpringBoot5,非Spring的代码只有下面这个启。提供大量优秀的Web框架方便开发等等。 在了解SpringBoot的启动流程的时候,我们先看一下一个SpringBoot应用是如何启动的,如下是一个简单的SpringBoot程序,非常的简洁,他是如何做到的呢,我们接下来就将一步步分解。 执行核心run方法初始化initialize方法执行完之后,会调用run方法,开始启动SpringBoot。 SpringBoot的启动主要是通过实例化SpringApplication来启动的。 在了解SpringBoot的启动流程的时候,我们先看一下一个SpringBoot应用是如何启动的,如下是一个简单的SpringBoot程序,非常的简洁,他是如何做到的呢,我们接下来就将一步步分解。 SpringBoot在启动时,通过ConfigurationClassPostProcessor.postProcessBeanFactory完成对依赖jar包中XxAutopConfiguration类的注册,自然DubboAutoConfiguration也会被注册到容器内部。 1、以下两种方式是将该配置文件打包在jar包里面了,即便只改一个端口号,开发人员先改配置文件,再打包,再运行。此处也记录下,并解开jar包,看下该配置文件被打包后,放置的位置。 2、SpringBoot中的配置文件主要有三种格式,properties、yaml、和xml方式。 3、如果存在增加了配置文件或者在配置文件里面增加了属性却没有生效,可以参考上面的springboot配置文件表达式和配置文件生效顺序进行排查。后面还会有一篇文章讨论基于springboot配置原理如何实现自定义的配置读取方式。 4、项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下。 5、以上就是暂时对springboot比较浅的理解,待后续深入。 初始化initialize方法执行完之后,会调用run方法,开始启动SpringBoot。首先遍历执行所有通过SpringFactoriesLoader,在当前classpath下的META-INF/spring.factories中查找所有可用的SpringApplicationRunListeners并实例化。 SpringBootx只区分web环境和非web环境,而在x版本中引入了Reactive环境,即响应式环境.那么现在SpringBoot支持三种环境:Servlet的web环境、Reactive的web环境以及非web环境。 首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于SpringBoot5,非Spring的代码只有下面这个启。提供大量优秀的Web框架方便开发等等。 springboot启动流程如下:启动流程主要分为三个部分,第一部分进行、SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块。 启动:每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解。
springBoot是什么
Spring Boot可以轻松创建可以“直接运行”的独立的、生产级的基于Spring的应用程序。
我们对Spring平台和第三方保持固执己见的看法,因此您可以轻松上手。大多数Spring Boot应用程序需要最少的时间Spring配置。
其特征如下:
创建独立的Spring应用程序
直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)
提供自以为是的“入门”依赖项以简化您的构建配置
尽可能自动配置Spring和3rd方库
提供生产就绪功能,例如指标、健康检查和外部化配置
完全无需代码生成,无需XML配置
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()来回答发送到该
***隐藏网址***
第3步:尝试一下
让我们构建并运行程序。打开命令行(或终端)并导航到您拥有项目文件的文件夹。我们可以通过发出以下命令来构建和运行应用程序:
您应该会看到一些与此非常相似的输出:
***隐藏网址***
【每天学点Spring】Spring以及Spring Boot框架知识图谱
【参考】
***隐藏网址***
***隐藏网址***
***隐藏网址***
Spring框架以及Spring Boot框架当然是Java最火热的框架之一,罗列了一些知识点:
【解释】
看文档 是最最重要的,所以在RoadMap图中,把它放在第一位。
很多时候我们都会忽略这一点,但其实最准确的解释往往是来自于文档。开发人员花了大量时间来写文档,当然是希望对使用者有所帮助,并且Spring的文档写的也非常全面,所以很有必要好好读一读文档。
Spring 官网:***隐藏网址***
Spring Framework文档:***隐藏网址***
从文档首页也能看到Spring框架的分类,所以才说文档很重要:
Spring Boot文档:***隐藏网址***
springboot启动流程是什么
首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于Spring Boot 2.1.5,非Spring的代码只有下面这个启。
提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。
Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。
SpringBoot的启动主要是通过实例化SpringApplication来启动的。
启动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。
在SpringBoot中启动tomcat的工作在刷新上下这一步。
而tomcat的启动主要是实例化两个组件:Connector、Container,一个tomcat实例就是一个Server,一个Server包含多个Service,也就是多个应用程序,每个Service包含多个Connector和一个Container,而一个Container下又包含多个子容器。
如何创建一个spring boot框架
ing应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
废话不多说,关于spring-boot是什么具体请百度。
***隐藏网址***
1. spring-boot是一个mavan项目,所以其使用的jar包全部是通过maven管理,当然,使用maven也是非常方便的。
首先上我的项目目录结构:
spring-boot打出来的包是一个可执行jar包的状态,使用的是内置的tomcat服务器,所以不需要将项目转成EJB项目。
2.设置pom.xml文件
使用过maven的朋友都知道,maven通过pom文件的依赖来进行管理jar包,所以核心也是这个pom.xml文件
《?xml version="1.0" encoding="UTF-8"?》
***隐藏网址***
***隐藏网址***
《modelVersion》4.0.0《/modelVersion》
《groupId》com.lclc.boot《/groupId》
《artifactId》boot-cache《/artifactId》
《version》0.0.1-SNAPSHOT《/version》
《!-- Inherit defaults from Spring Boot --》
《parent》
《!--Spring Boot基础父类,其中包含了很多必要的jar包,如果不使用父类,则需要自己去依赖这些jars --》
《groupId》org.springframework.boot《/groupId》
《artifactId》spring-boot-starter-parent《/artifactId》
《version》1.1.3.RELEASE《/version》
《/parent》
《dependencies》
《!-- web程序的启动项依赖,通过此依赖可引入内嵌的tomcat等web必须的jars --》
《dependency》
《groupId》org.springframework.boot《/groupId》
《artifactId》spring-boot-starter-web《/artifactId》
《/dependency》
《!-- spring-data-jpa程序的启动项依赖,底层为hibernate实现,若不使用此框架则可以依赖其他的orm框架 --》
《dependency》
《groupId》org.springframework.boot《/groupId》
《artifactId》spring-boot-starter-data-jpa《/artifactId》
《/dependency》
《!-- thymeleaf程序的启动项依赖,spring-boot对thymeleaf模板引擎支持最好,建议模板引擎使用此框架 --》
《dependency》
《groupId》org.springframework.boot《/groupId》
《artifactId》spring-boot-starter-thymeleaf《/artifactId》
《/dependency》
《!-- mysql依赖,使用spring-data-jpa需要指定一个数据库方言,用于连接数据库,即mysql驱动 --》
《dependency》
《groupId》mysql《/groupId》
《artifactId》mysql-connector-java《/artifactId》
《/dependency》
《/dependencies》
《dependencyManagement》
《dependencies》
《/dependencies》
《/dependencyManagement》
《build》
《plugins》
《!-- 通过maven构建的插件 --》
《plugin》
《groupId》org.springframework.boot《/groupId》
《artifactId》spring-boot-maven-plugin《/artifactId》
《/plugin》
《/plugins》
《/build》
《!-- 仓库,使用spring-boot RELEASE版本需要这些 --》
《repositories》
《repository》
《id》spring-snapshots《/id》
***隐藏网址***
《snapshots》
《enabled》true《/enabled》
《/snapshots》
《/repository》
《repository》
《id》spring-milestones《/id》
***隐藏网址***
《/repository》
《/repositories》
《pluginRepositories》
《pluginRepository》
《id》spring-snapshots《/id》
***隐藏网址***
《/pluginRepository》
《pluginRepository》
《id》spring-milestones《/id》
***隐藏网址***
《/pluginRepository》
《/pluginRepositories》
《/project》
pom.xml
3.使用maven update 下载jar包
4.由于我们使用了thymeleaf引擎,此引擎需要一个templates文件夹来存放静态页面,以便进行跳转前台。
所以在resources下添加此文件夹并加入一个默认的页面index.html(注:此文件夹下必须有一个html页面,否则thymeleaf启动项会抛异常)
5.编写application.properties
这个配置文件是对spring-boot的一些配置,spring-boot通过此文件对集成在其中的一些框架进行配置。由我的项目结构可以看出,我有两个application.properties文件:
application.properties:主配置文件,spring-boot直接读取这个文件。注:配置文件必须放在resources下,即放在项目根目录下。
application-dev.properties:开发环境配置文件,这个是我的开发环境的配置文件,为了简化一些开发,所以需要一些与部署环境不同的配置,比如页面缓存之类的。此文件通过application.properties的spring.profiles.active属性进行配置读取。
上两个文件的代码:
首先是application.properties:
# PROFILES
## dev | prod | test
spring.profiles.active=dev
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080
server.session-timeout=30
server.context-path=
server.tomcat.max-threads=0
server.tomcat.uri-encoding=UTF-8
# THYMELEAF (ThymeleafAutoConfiguration)
spring.thymeleaf.encoding=UTF-8
# DataSource
spring.datasource.initialize=false
spring.datasource.test-on-borrow=false
spring.datasource.test-on-return=false
spring.datasource.test-while-idle=true
spring.datasource.max-wait-millis=30000
spring.datasource.validation-query=SELECT 1
spring.datasource.time-between-eviction-runs-millis=20000
spring.datasource.min-evictable-idle-time-millis=28700
application.properties
然后是application-dev.properties:
#page cache
spring.thymeleaf.cache=false
# DATASOURCE
spring.datasource.platform=mysql
spring.datasource.url=jdbc:mysql://localhost/test_development?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.max-active=5
spring.datasource.max-idle=2
spring.datasource.min-idle=1
spring.datasource.initial-size=1
spring.datasource.initialize=false
# JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=false
spring.jpa.properties.hibernate.use_sql_comments=true
application-dev.properties
6.于是配置便完成了,现在看怎么使用spring-boot进行启动一个web程序
spring-boot打的包是一个可执行的jar包,当然也可以打成可执行的war包,启动服务器就完全不需要像以前一样弄一个tomcat进行启动了,完全是java application进行启动
通过一个启动文件的main方法
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String args){
SpringApplication springApplication = new SpringApplication (Application.class);
springApplication.run (args);
}
}
Application.java
Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC
最近我整理了一下一线架构师的Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC,分享给大家一起学习一下~ 文末免费获取哦
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
1.1 Spring面试必备题+解析
1.2 Spring学习笔记
(1)Spring源码深入解析
(2)Spring实战
1.3 Spring学习思维脑图
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
2.1 Spring Boot面试必备题+解析
2.2 Spring Boot学习笔记
(1)Spring Boot实践
(2)SpringBoot揭秘 快速构建微服务体系
2.3 SpringBoot学习思维脑图
springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。
3.1 Spring Cloud面试必备题+解析
3.2 Spring Cloud学习笔记
(1)Spring Cloud参考指南
SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发
4.1 Spring MVC面试必备题+解析
4.2 Spring MVC学习笔记
(1)看透Spring MVC源代码分析与实践
(2)精通Spring MVC
最后分享一下一份JAVA核心知识点整理(PDF)
从零开始新建Springboot项目之项目启动(一)
一般都是使用搭建好的框架进行业务逻辑开发,一直不清楚整个项目是如何从零到一构建出来的。所以开一个帖子,记录一下一个springboot项目是如何构建的。
使用的工具为idea
选择maven或者spring initializr都可以。spring initializr会在pom中自动添加一些springboot用到的jar包,此处选择maven。起好名字后,一路next即可
从实际开发角度,构建Module不是必选项。但学习嘛,还是要知道是怎么创建的
右键项目名称 -》 New -》 Module
依然选择maven,起名字即可。一般命名为:XXXX-Controller,XXXX-Service等等
建好后,pom中会多出以下内容
(放弃多模块配置)
可在此处搜索 mvnrepository
首先添加parent,作为父级依赖。位置在 《project》《/project》 的下一级,与 《groupId》org.example《/groupId》 同级,
在 《parent》《/parent》 同级新建 《dependency》《/dependency》 标签,引入web项目需要的依赖
如果是多模块的项目,需要在每一个模块的pom文件中,添加其依赖的其他模块。例如controller依赖service,则需要在controller的pom文件中添加以下依赖信息。如果不是多模块项目,可以忽略
在java路径下新建顶级路径 com.tardis ,在此路径下新建文件 CustomerApplication (名字随意)。新建 controller , service 的 package 。在 CustomerApplication 添加如下方法
文件的层级关系如图
在 resource 目录下,新建 application.yml , application.dev.yml , application.prod.yml 文件,作为总体,开发环境,生产环境的配置文件。配置文件格式为 properties , yml 均可,此处使用 yml ,看起来比较简洁清晰
层级关系如图
为了更好地演示效果,可以先写一个简单的Controller进行测试,在controller文件夹中新建class,名字随意。文件层级如图。放一个最简单的接口。
使用postman调用,返回结果如下
一图看懂Spring Boot 异步框架
在SpringBoot的日常开发中,一般都是同步调用的。但经常有特殊业务需要做异步来处理,例如:注册新用户,送100个积分,或下单成功,发送push消息等等。
就拿注册新用户为什么要异步处理?
在SpringBoot中使用异步调用是很简单的,只需要使用@Async注解即可实现方法的异步调用。
采用@EnableAsync来开启异步任务支持,另外需要加入@Configuration来把当前类加入springIOC容器中。
增加一个service类,用来做积分处理。
@Async添加在方法上,代表该方法为异步处理。
@Async注解,在默认情况下用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上的线程池,因为线程不重用,每次调用都会新建一条线程。
可以通过控制台日志输出查看,每次打印的线程名都是.....递增的。
@Async注解异步框架提供多种线程
SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。
SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方。
ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。
ThreadPoolTaskScheduler:可以使用cron表达式。
ThreadPoolTaskExecutor :最常使用,推荐。 其实质是对java.util.concurrent.ThreadPoolExecutor的包装。

更多文章:
1970年时间戳转换(时间格式如何转换十六进制的算法——这个的运行方法)
2025年7月27日 04:45
编辑器不支持粘贴本地图片(为什么我在淘宝中使用编辑器里,没法粘贴图片)
2025年6月28日 14:30
onclick可以执行两个方法吗(onclick事件重复执行(一次点击执行了两次))
2026年2月13日 17:00
丰田荣放normal是什么意思(汽车上的normal是啥意思)
2026年8月14日 13:45
tensorflow怎么安装到python(安装tensorflow,安装python问题)
2025年8月25日 16:00
postman请求webservice接口(用postman批量调用接口)
2025年12月23日 17:00
displaylink 芯片(displaylink需要显卡吗)
2026年3月9日 11:30
墨迹天气插件(vivo手机的桌面插件在哪里能找到,我安装墨迹天气,设置桌面时钟,都不知道装在哪)
2026年6月5日 02:15
itss资质证书(ITSS运维资质认证证书在招投标中有多大用处)
2025年9月18日 06:00














