JAVA面试之Springboot

1 什么是springboot ?
用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
创建独立的spring引用程序 main方法运行
嵌入的Tomcat 无需部署war文件
简化maven配置
自动配置spring添加对应功能starter自动化配置
答:spring boot来简化spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用

2 Springboot 有哪些优点?
快速创建独立运行的spring项目与主流框架集成
使用嵌入式的servlet容器,应用无需打包成war包
starters自动依赖与版本控制
大量的自动配置,简化开发,也可修改默认值
准生产环境的运行应用监控
与云计算的天然集成
3 如何重新加载Spring Boot上的更改,而无需重新启动服务器?
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。
这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
org.springframework.boot
spring-boot-devtools
true
4 Spring Boot、Spring MVC 和 Spring 有什么区别?
1、Spring
Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
2、Spring MVC
Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
3、SpringBoot
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
在这里插入图片描述
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

5 什么是自动配置?
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
我们能否带来更多的智能?当一个 MVC JAR 添加到应用程序中的时候,我们能否自动配置一些 beans?
Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。

6 什么是 Spring Boot Stater ?
启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的 Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。
例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进行。

7 能否举一个例子来解释更多 Staters 的内容?
让我们来思考一个 Stater 的例子 -Spring Boot Stater Web。
如果你想开发一个 web 应用程序或者是公开 REST 服务的应用程序。Spring Boot Start Web 是首选。让我们使用 Spring Initializr 创建一个 Spring Boot Start Web 的快速项目。
依赖项可以被分为:
Spring - core,beans,context,aop
Web MVC - (Spring MVC)
Jackson - for JSON Binding
Validation - Hibernate,Validation API
Enbedded Servlet Container - Tomcat
Logging - logback,slf4j
任何经典的 Web 应用程序都会使用所有这些依赖项。Spring Boot Starter Web 预先打包了这些依赖项。
作为一个开发者,我不需要再担心这些依赖项和它们的兼容版本。

8 Spring Boot 还提供了其它的哪些 Starter Project Options?
Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。
spring-boot-starter-web-services - SOAP Web Services;
spring-boot-starter-web - Web 和 RESTful 应用程序;
spring-boot-starter-test - 单元测试和集成测试;
spring-boot-starter-jdbc - 传统的 JDBC;
spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能;
spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权;
spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA;
spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务;

为什么我们需要 spring-boot-maven-plugin?
spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。
1、spring-boot:run 运行你的 SpringBooty 应用程序。
2、spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行
3、spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期(也可以说是为了集成测试)。
4、spring-boot:build-info 生成执行器可以使用的构造信息。

SpringBoot与SpringCloud 区别
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。

你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架.

SpringBoot Starter 的工作原理是什么?
SpringBoot 在启动的时候会干这几件事情:
1、 SpringBoot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
2、 根据 spring.factories 配置加载 AutoConfigure 类
3、 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context
总结一下,其实就是 SpringBoot 在启动的时候,按照约定去读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 SpringBoot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 SpringBoot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景;

Spring、SpringBoot、SpringMVC的区别?
1、 Spring框架就像一个家族,有众多衍生产品,例如boot、mvc、jpa等等。但他们的基础都是Spring的ioc、aop。ioc提供了依赖注入的容器,aop解决了面向横切面编程,然后在此两者的基础上实现了其它延伸产品的高级功能;
2、 springMVC是基于Servlet的一个MVC框架主要解决WEB开发的问题;
3、 为了简化开发的使用,从而创造性地推出了SpringBoot框架,默认优于配置

SpringBoot 配置文件的加载顺序
由jar包外向jar包内进行寻找;
优先加载带profile
jar包外部的application-{profile}.properties或application.yml(带spring.profile配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile配置文件
再来加载不带profile
jar包外部的application.properties或application.yml(不带spring.profile配置文件
jar包内部的application.properties或application.yml(不带spring.profile配置文件

SpringBoot 中如何实现定时任务 ?
在 SpringBoot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

pring-boot-starter-parent 有什么用 ?
我们都知道,新创建一个 SpringBoot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
1、 定义了 Java 编译版本为 1、8 。
2、 使用 UTF-8 格式编码。
3、 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
4、 执行打包操作的配置。
5、 自动化的资源过滤。
6、 自动化的插件配置。
7、 针对 application、properties 和 application、yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev、properties 和 application-dev、yml。
总结就是打包用的

Async异步调用方法
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用@Async注解即可实现方法的异步调用。 注意:需要在启动类加入@EnableAsync使异步调用@Async注解生效。

什么是 JavaConfig?
1、 面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2、 减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
3、 类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 SpringBoot 的核心注解 主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。

我们如何监视所有 SpringBoot 微服务?
SpringBoot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。它建立在 SpringBoot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。

SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
1、 依赖 JDK 版本升级:2.x 里面的许多方法应用了 JDK 8 的许多高级新特性,至少需要 JDK 8 的支持;
2、 第三方类库升:2.x 对第三方类库升级了所有能升级的稳定版本,例如:Spring Framework 5+、Tomcat 8.5+、Hibernate 5.2+、Thymeleaf 3+;
3、 响应式 Spring 编程:2.x 通过启动器和自动配置全面支持 Spring 的响应式编程,响应式编程是完全异步和非阻塞的,它是基于事件驱动模型,而不是传统的线程模型;
4、 连接池:2.x 默认使用 HikariCP 连接池;
5、 json:提供了一个 spring-boot-starter-json 启动器对 JSON 读写的支持;
6、 Quartz:2.x 提供了一个 spring-boot-starter-quartz 启动器对定时任务框架 Quartz 的支持;
7、 HTTP/2 支持:提供对HTTP/2 的支持,如:Tomcat, Undertow, Jetty;
8、 Actuator加强:在 2.x 中,对执行器端点进行了许多改进,所有的 HTTP 执行端点现在都暴露在 /actuator路径下,并对 JSON 结果集也做了改善。

spring boot监听器流程?
1、 通过app.addListeners注册进入 2、初始化一个SpringApplicationRunListeners进行处理
3、 从spring.factories中读取监听器处理类EventPublishingRunListener
4、 通过createSpringFactoriesInstances创建监听器处理类实例
5、 调用监听器listeners.starting()的方法来启动。
6、 底层把事件处理交给线程池去处理

 

springboot自动装配原理

我们在使用springboot时,并没有像之前项目加载我们的前端控制DispatcherServlet,也没有写编码过滤器。但是springboot可以完成请求以及编码的设置。

原理: 主启动类上的@SpringBootApplication注解上,而该注解是一个复合组件,而在复合注解中存在@EnableAutoConfiguration, 这个@EnableAutoConfiguration注解也是一个复合注解,包含@Import---而@Import注解导入一个AutoConfigurationImportSelector 【自动配置选择器】,在该类中存在一个方法getAutoConfigurationEntry --作用:得到自动配置类的实体。而这些自动配置类会完成相应的自动装配。

posted @ 2023-08-16 15:21  繁体字  阅读(14)  评论(0编辑  收藏  举报