目录
SpringBoot、Spring MVC和Spring有什么区别?
为什么需要spring-boot-maven-plugin?
spring-boot-starter-parent有什么作用?
SpringBoot的核心配置文件有哪几个?他们的区别是什么?
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
@EnableAutoConfiguration:实现自动装配的核心注解
AutoConfigurationImportSelector:加载自动装配类
注意:本文参考
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-d