NickDwade

 

2021最新面试题-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 的核心功能之一。

    避免大量的Maven导入和各种版本冲突

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

SpringBoot的核心注解是什么?由那些注解组成?

  启动类上@SpringBootApplication是 SpringBoot 的核心注解 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
      @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

  主要组合包含了以下 3 个注解:

    @SpringBootConfiguration:
    组合了 @Configuration 注解,实现配置文件的功能。

    @EnableAutoConfiguration:
    打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

    @ComponentScan:
    Spring组件扫描。

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通过一个自动配置和启动的项来解决这个问题。

SpringBoot启动时都做了什么?

  1. SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
  2. 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
  3. 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
  4. 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
  5. 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;

SpringBoot自动配置原理是什么?

  

 

 

 启动类上有一个注解@SpringBootApplication,这个注解标在哪个类上,就代表哪一个类是SpringBoot的主配置类,SpringBoot应用就通过这个类启动

  @SpringBootApplication是一个组合注解,它由几个注解来组成,其中最重要的两个注解是@SpringBootConfiguration和@EnableAutoConfiguration

    @SpringBootConfiguration,他就和Spring的注解@Configuration功能一样,标注在哪个类上,表示这是一个springboot的配置类

    @EnableAutoConfiguration是自动配置的核心注解,表示开启自动配置功能,他也是一个组合注解,也有两个核心的注解,@AutoConfigurationPackage和        @Import(AutoConfigurationImportSelector.class)

      @AutoConfigurationPackage 自动导包,@AutoConfigurationPackage这个注解本身的含义就是将主配置类(@SpringBootApplication标注的类)所在的包下面所有的组件都扫描到spring容器中,包名都是主配置类的,它其实返回了当前主程序类的 同级以及子级     的包组件。 和启动类同级的包会被加载

      @Import(AutoConfigurationImportSelector.class) //自动配置导入选择,他会去加载META-INF/spring.factories这个文件,这个文件中有很多自动配置的类,他会从这个文件中读取配置类清单。然后会循环封装成Properties对象,加载到容器中

 

 

posted on 2021-03-10 09:56  NickDwade  阅读(1)  评论(0)    收藏  举报

导航