SpringBoot 理论总结

目录

什么是SpringBoot?

SpringBoot有哪些优缺点?

SpringBoot、Spring MVC和Spring有什么区别?

项目启动运行配置

什么是Spring Boot Starter?

Spring Boot有哪些jar包

为什么需要spring-boot-maven-plugin?

spring-boot-starter-parent有什么作用?

SpringBoot 打成jar和普通的jar有什么区别?

运行SpringBoot有几种方式?

开启Spring Boot特性有哪几种方式?

SpringBoot的核心配置文件有哪几个?他们的区别是什么?

SpringBoot有哪几种读取配置的方式?

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

讲述一下 SpringBoot 自动装配原理?

前言

什么是 SpringBoot 自动装配?

SpringBoot 是如何实现自动装配的?

@EnableAutoConfiguration:实现自动装配的核心注解

AutoConfigurationImportSelector:加载自动装配类

@AutoConfigurationPackage

如何实现一个 Starter

总结

Spring Boot和Spring生命周期

SpringBoot上下游关系

SpringBoot应用分类 

流程部分总图

SpringBoot应用部署包及启动原理

SpringBoot应用生命周期

Bean生命周期(自动装配)获取Bean定义集合

Bean生命周期(自动装配)实例化Bean定义

Runing

什么是Swagger?你用Spring Boot实现了吗?

前后端分离,如何维护接口文档?

如何使用Spring Boot实现异常处理?

Spring Boot中如何解决跨域问题?

spring是如何扫描bean的


注意:本文参考

docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md · SnailClimb/JavaGuide - Gitee.com

SpringBoot面试题(持续整理中……)_HTZW的博客-CSDN博客_springboot面试题

SpringBoot应用及Bean自动装配生命周期关键节点 - 知乎

springBoot自动注入原理_野生java研究僧的博客-CSDN博客_springboot的注入原理

什么是SpringBoot?

用来简化Spring应用的初始搭建以及开发过程,使用特定的方式来进行配置

创建独立的Spring引用程序main方法运行

嵌入的tomcat无需部署war文件

简化maven配置

自动配置Spring添加对应的功能starter自动化配置

SpringBoot来简化Spring应用开发,约定大于配置,去繁化简

SpringBoot有哪些优缺点?

优点

独立运行

Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成war 包部署到容器中,Spring Boot 只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个 jar 包内。

简化配置

spring-boot-starter-web 启动器自动依赖其他组件,简少了 maven 的配置。

自动配置

Spring Boot 能根据当前类路径下的类、jar 包来自动配置 bean,如添加一个 spring

boot-starter-web 启动器就能拥有 web 的功能,无需其他配置。

无代码生成和XML配置

Spring Boot 配置过程中无代码生成,也无需 XML 配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是 Spring4.x 的核心功能之一。

应用监控

Spring Boot 提供一系列端点可以监控服务及应用,做健康检测。

缺点

Spring Boot 虽然上手很容易,但如果你不了解其核心技术及流程,所以一旦遇到问题就很棘手,而且现在的解决方案也不是很多,需要一个完善的过程。

SpringBoot、Spring MVC和Spring有什么区别?

Spring

Spring最重要的特征是依赖注入。所有Spring Modules不是依赖注入就是IOC控制反转。

当我们恰当的使用DI或者是IOC的时候,可以开发松耦合应用。

Spring MVC

Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

SpringBoot

Spring和Spring MVC的问题在于需要配置大量的参数。

SpringBoot通过一个自动配置和启动的项来解决这个问题。

项目启动运行配置

什么是Spring Boot Starter?

启动器是一套方便的依赖描述符,它可以放在自己的程序中。可以一站式的获取你所需要的Spring和相关技术,而不需要依赖描述符的通过示例代码搜索和复制粘贴的负载。

例如,如果想使用Spring和JPA访问数据库,只需要项目中包含spring-boot-starter-data-jpa 依赖项,你就可以正产是用。

Spring Boot有哪些jar包

spring-boot-starter                核心启动器,包括自动配置支持,日志记录和YAML    
spring-boot-starter-activemq            使用Apache ActiveMQ进行JMS消息传递的入门者
spring-boot-starter-amqp            使用Spring AMQP和Rabbit MQ的入门者    
spring-boot-starter-aop                使用Spring AOP和AspectJ进行面向方面编程的入门者    
spring-boot-starter-artemis            使用Apache Artemis进行JMS消息传递的入门者    
spring-boot-starter-batch            使用Spring Batch的入门者
spring-boot-starter-cache            使用Spring Framework的缓存支持的初学者    
spring-boot-starter-cloud-connectors        使用Spring Cloud Connectors的初学者简化了Cloud Foundry和Heroku等云平台中的服务连接
spring-boot-starter-data-cassandra        使用Cassandra分布式数据库和Spring Data Cassandra的入门者
spring-boot-starter-data-cassandra-reactive    使用Cassandra分布式数据库和Spring Data Cassandra Reactive的入门者
spring-boot-starter-data-couchbase        使用Couchbase面向文档的数据库和Spring Data Couchbase的入门者
spring-boot-starter-data-couchbase-reactive    使用Couchbase面向文档的数据库和Spring Data Couchbase Reactive的入门者
spring-boot-starter-data-elasticsearch        使用Elasticsearch搜索和分析引擎以及Spring Data Elasticsearch的初学者
spring-boot-starter-data-jdbc            使用Spring Data JDBC的入门者
spring-boot-starter-data-jpa            将Spring Data JPA与Hibernate一起使用的初学者
spring-boot-starter-data-ldap            使用Spring Data LDAP的入门者
spring-boot-starter-data-mongodb        使用MongoDB面向文档的数据库和Spring Data MongoDB的初学者
spring-boot-starter-data-mongodb-reactive    使用MongoDB面向文档的数据库和Spring Data MongoDB Reactive的入门者
spring-boot-starter-data-neo4j            使用Neo4j图形数据库和Spring Data Neo4j的入门者
spring-boot-starter-data-redis            在Spring Data Redis和Lettuce客户端上使用Redis键值数据存储的初学者
spring-boot-starter-data-redis-reactive        使用带有Spring Data Redis被动的Redis键值数据存储和Lettuce客户端的入门者
spring-boot-starter-data-rest            使用Spring Data REST通过REST公开Spring Data存储库的入门者
spring-boot-starter-data-solr            在Spring Data Solr中使用Apache Solr搜索平台的初学者
spring-boot-starter-freemarker            使用FreeMarker视图构建MVC Web应用程序的入门者
spring-boot-starter-groovy-templates        使用Groovy模板视图构建MVC Web应用程序的入门者
spring-boot-starter-hateoas            使用Spring MVC和Spring HATEOAS构建基于超媒体的RESTful Web应用程序的入门者
spring-boot-starter-integration            使用Spring Integration的入门者
spring-boot-starter-jdbc            将JDBC与HikariCP连接池一起使用的入门者
spring-boot-starter-jersey            使用JAX-RS和Jersey构建RESTful Web应用程序的初学者。替代spring-boot-starter-web
spring-boot-starter-jooq            使用jOOQ访问SQL数据库的初学者。替代spring-boot-starter-data-jpa或spring-boot-starter-jdbc
spring-boot-starter-json            阅读和写作json的初学者
spring-boot-starter-jta-atomikos        使用Atomikos进行JTA交易的入门者
spring-boot-starter-jta-bitronix        使用Bitronix进行JTA事务的入门者
spring-boot-starter-jta-narayana        Spring Boot Narayana JTA 启动器
spring-boot-starter-mail            使用Java Mail和Spring Framework的电子邮件发送支持的入门者
spring-boot-starter-mustache            使用Mustache视图构建Web应用程序的入门者
spring-boot-starter-oauth2-client        使用Spring Security的OAuth2 / OpenID Connect客户端功能的入门者
spring-boot-starter-oauth2-resource-server    使用Spring Security的OAuth2资源服务器功能的入门者
spring-boot-starter-quartz            使用Quartz调度程序的入门者    
spring-boot-starter-security            使用Spring Security的入门者
spring-boot-starter-test            使用JUnit,Hamcrest和Mockito等库来测试Spring Boot应用程序的初学者    
spring-boot-starter-thymeleaf            使用Thymeleaf视图构建MVC Web应用程序的入门者
spring-boot-starter-validation            使用Java Bean Validation和Hibernate Validator的初学者
spring-boot-starter-web                使用Spring MVC构建Web(包括RESTful)应用程序的入门者。使用Tomcat作为默认嵌入式容器
spring-boot-starter-web-services        使用Spring Web Services的入门者
spring-boot-starter-webflux            使用Spring Framework的Reactive Web支持构建WebFlux应用程序的初学者
spring-boot-starter-websocket            使用Spring Framework的WebSocket支持构建WebSocket应用程序的初学者
spring-boot-starter-jetty            使用Jetty作为嵌入式servlet容器的入门。替代spring-boot-starter-tomcat
spring-boot-starter-log4j2            使用Log4j2进行日志记录的入门。替代spring-boot-starter-logging
spring-boot-starter-logging            使用Logback进行日志记录的入门。默认日志启动器
spring-boot-starter-reactor-netty        使用Reactor Netty作为嵌入式响应式HTTP服务器的入门者。
spring-boot-starter-tomcat            使用Tomcat作为嵌入式servlet容器的入门者。使用的默认servlet容器启动器spring-boot-starter-web
spring-boot-starter-undertow            使用Undertow作为嵌入式servlet容器的入门者。替代spring-boot-starter-tomcat

为什么需要spring-boot-maven-plugin?

spring-boot-maven-plugin提供了一些像jar一样打包或者运行应用程序的命令。

spring-boot:run 运行SpringBoot应用程序;

spring-boot:repackage 重新打包你的jar包或者是war包使其可执行

spring-boot:start和spring-boot:stop管理Spring Boot应用程序的生命周期

spring-boot:build-info生成执行器可以使用的构造信息

spring-boot-starter-parent有什么作用?

我们知道,新建一个SpringBoot项目,默认都是有parent的

<parent>
 
        <groupId>org.springframework.boot</groupId>
 
        <artifactId>spring-boot-starter-parent</artifactId>
 
        <version>2.1.4.RELEASE</version>
 
        <relativePath/> <!-- lookup parent from repository -->
 
    </parent>

这个parent就是spring-boot-starter-parent,spring-boot-starter-parent主要有如下作用:

定义了Java编译版本为1.8

使用UTF-8格式编码

继承自spring-boor-dependencies,这里面定义了依赖的版本,也正是因为继承了这个依赖,我们在写依赖时才不需要写版本号

执行打包操作的配置

自动化的资源过滤

自动化的插件配置

针对application.peoperties和application.yuml的资源过滤,包括通过profile定义的不同环境的配置文件,例如application-dev.properties和application-dev.yuml。

SpringBoot 打成jar和普通的jar有什么区别?

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过java -jar xxx.jar命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

运行SpringBoot有几种方式?

打包用命令或者放到容器中运行

用Maven或Gradle插件运行

直接执行main方法运行

开启Spring Boot特性有哪几种方式?

继承spring-boot-starter-parent项目

导入spring-boot-dependencies项目依赖

SpringBoot的核心配置文件有哪几个?他们的区别是什么?

SpringBoot的核心配置文件是application和bootstrap配置文件。

application配置文件这个容易理解,主要用于Spring Boot项目的自动化配置。

application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等。

bootstrap.yml

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值