SpringBoot常见面试题总结

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. 什么是 Spring Boot

Spring Boot 是 Spring 开源组织下的子项目是 Spring 组件一站式解决方案主要是简化了使用 Spring 的难度简省了繁重xml的配置提供了各种启动器在运行过程中自定配置, 开发者能快速上手。

2. SpringBoot的核心功能

  1. SpringBoot项目为独立运行的spring项目,java -jar xx.jar即可运行。
  2. 内嵌servlet容器(可以选择内嵌: tomcat ,jetty等服务器.)。
  3. 提供了starter的pom 配置 简化了 maven的配置。
  4. 自动配置spring容器中的bean.当不满足实际开发场景,可自定义bean的自动化配置。
  5. 准生产的应用监控(基于: ssh , http , telnet 对服务器运行的项目进行监控.)。
  6. springboot无需做出xml配置,也不是通过代码生成来实现(通过条件注解.)。

3. 为什么要用 Spring BootSpring Boot的优点

  1. 容易上手提升开发效率为 Spring 开发提供一个更快、更广泛的入门体验。
  2. 开箱即用远离繁琐的配置。
  3. 提供了一系列大型项目通用的非业务性功能例如内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
  4. 没有代码生成也不需要XML配置。
  5. 避免大量的 Maven 导入和各种版本冲突。

4. Spring Boot 的核心配置文件有哪几个它们的区别是什么

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

  • application 配置文件这个容易理解主要用于 Spring Boot 项目的自动化配置。
  • bootstrap 配置文件有以下几个应用场景
  1. 使用SpringCloudConfig配置中心时这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息
  2. 一些固定的不能被覆盖的属性
  3. 一些加密/解密的场景。

5. Spring Boot 的配置文件有哪几种格式它们有什么区别

.properties 和 .yml它们的区别主要是书写格式不同。

  • .properties

    app.user.name = javastack
    
  • .yml

    app:
     user:
        name: javastack
    

注 .yml 格式不支持 @PropertySource 注解导入配置。

6. Spring Boot 自动配置原理是什么

  • 在springboot的启动类中使用了@SpringBootApplication注解里面的@EnableAutoConfiguration注解是自动配置的核心注解内部使用@Import(AutoConfigurationImportSelector.class)class文件用来哪些加载配置类注解来加载配置类并不是所有的bean都会被加载在配置类或bean中使用@Condition来加载满足条件的bean。
  • @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类筛选有效的自动配置类。每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能。
    在这里插入图片描述

7. SpringBoot配置-profile

  • profile是用来完成不同环境下配置动态切换功能的

  • profile配置方式

    多profile文件方式提供多个配置文件每个代表一种环境。
    application-dev.properties/yml 开发环境
    application-test.properties/yml 测试环境
    application-pro.properties/yml 生产环境

  • profile激活方式
    配置文件spring.profiles.active=dev

8. SpringBoot中有哪些常用注解

在使用SpringBoot的过程中几乎没有了XML配置采用注解+JavaConfig方式开发这样做的好处是

  1. 采用纯java代码不在需要配置繁杂的xml文件
  2. 在配置中也可享受面向对象带来的好处
  3. 类型安全对重构可以提供良好的支持
  4. 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能

@SpringBootApplication

  1. 这个注解很常见了每次在启动SpringBoot项目的时候都会见到它它作用在类上标识该类为SpringBoot项目启动类。
  2. 并且让SpringBoot自动给程序进行必要的配置等同于@Configuration、@EnableAutoConfiguration、@ComponentScan这三个注解。

@Configuration

  1. 相当于传统Spring的xml配置文件。
  2. 如果第三方库需要用到xml文件建议通过@Configuration类作为项目的配置主类可以使用@ImportResource注解加载xml配置文件。

@EnableAutoConfiguration

  1. SpringBoot自动配置(auto-configuration)尝试根据你添加的启动器(starter)自动配置你的SpringBoot应用。
  2. 你可以将@EnableAutoConfiguration注解或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
  3. 如果发现应用了你不想要的特定自动配置类你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@ComponentScan

  1. 如果某个类加上@ComponentScan注解则该类会自动发现扫描组件。
  2. 也就是说如果扫描到有@Component、@Controller、@Service等这些注解的类并注册为Bean可以自动收集所有的Spring组件包括@Configuration类。
  3. 我们经常使用@ComponentScan注解搜索beans并结合@Autowired注解导入。如果没有配置的话SpringBoot会扫描启动类所在包下以及子包下的使用了@Component、@Controller、@Service、@Repository等注解的类。

@Controller

  1. @Controller注解用于定义控制器类在SpringBoot中由控制器负责将用户发来的URL请求转发到对应的服务接口(Controller层)。
  2. 一般这个注解用在类上控制器方法需要加上@RequestMapping注解。

@ResponseBody

  1. 如果控制器方法加上@ResponseBody注解该方法的返回结果将直接写入HTTP ResponseBody中一般在异步获取数据时使用用于构建RESTful的api。
  2. 在使用@RequestMapping后返回值通常解析为跳转路径加上@RsponseBody后返回结果不会被解析为跳转路径而是直接写入HTTP ResponseBody中。
  3. 比如异步获取json数据加上@ResponseBody后会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

@RestController

  1. @RestController注解是@Controller和@ResponseBody的合集。
  2. 使用在类上表示该类是控制器并且类中所有控制器方法的返回值直接填入HTTP响应体中是RESTful风格的控制器控制器方法返回JSON数据。

@RequestMapping

提供路由信息负责URL到Controller中的具体方法的映射。

@Import

用来导入其他配置类加了@Configuration注解的类。

@ImportResource

用来加载xml配置文件。

@PathVariable

获取URL上的参数Restful风格接口。

@Service

一般用于修饰service层的组件

@Repository

使用@Repository注解可以确保DAO或者repositories提供异常转译这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置同时也不需要为它们提供XML配置项。

@Bean

用@Bean标注方法等价于XML中配置的bean意思是产生一个bean并交给SpringBoot管理。

@Value

注入SpringBoot中的配置文件——application.properties配置的属性的值。

@Inject

等价于默认的@Autowired只是没有required属性。

@Component

泛指组件当组件不好归类的时候我们可以使用这个注解进行标注。

@AutoWired

自动导入依赖的bean , byType方式。把配置好的Bean拿来用完成属性、方法的组装它可以对类成员变量、方法及构造函数进行标注完成自动装配的工作。当加上required=false时就算找不到bean也不报错。

@Qualifier

当有多个同一类型的Bean时可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入但能进行更细粒度的控制如何选择候选者。

@ControllerAdvice

包含@Component可以被扫描到。统一处理异常。

@ExceptionHandler(Exception.class)

用在方法上面表示遇到这个异常就执行以下方法。

9. SpringBoot、SpringMVC 和 Spring 有什么区别

  • Spring
    Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
    当我们恰当的使用 DI 或者是 IOC 的时候我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
  • Spring MVC
    Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServeletMoudlAndView 和 ViewResolver 等一些简单的概念开发 Web 应用将会变的非常简单。
  • SpringBoot
    Spring 和 SpringMVC 的问题在于需要配置大量的参数。
    Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序Spring Boot 提供了一些非功能性特征。

10. SpringBoot配置监听器、过滤器和拦截器

  1. 监听器继承HttpSessionListener

  2. 过滤器继承Filter

  3. 拦截器继承HandlerInterceptor

配置类注解@Configuration实现WebMvcConfigurer

11. 拦截器过滤器的区别

  1. 拦截器可以访问action上下文、值栈里的对象而过滤器不能

  2. 拦截器只能对action请求起作用拦截器可以多次被调用过滤器可以对几乎所有的请求起作用

  3. Filter在Servlet前后作用Interceptor在方法的前后作用异常抛出前后具有更大的弹性。所以优先使用拦截器。

12. SpringBoot项目怎么部署

Springboot默认已经集成了内置的Tomcat对它进行打包jar后里面就有tomcat。直接以jar包方式运行就ok。

  1. 打包

    pom.xml加入打包插件
     
    <build>      
          <plugins>          
              <plugin>            
      <groupId>org.springframework.boot</groupId>       
      <artifactId>spring-boot-maven-plugin</artifactId>         
              </plugin>      
          </plugins> 
    </build>
    

    打包指令mvn clean package

  2. 部署

    windows: java -jar xxx.jar
    Linux后台运行nohup java -jar xxx.jar
    
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring