0


SpringBoot常见面试题总结

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 Boot?(Spring 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,它们的区别主要是书写格式不同。

  • .propertiesapp.user.name = javastack
  • .ymlapp: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 应用。通过运用像 DispatcherServelet,MoudlAndView 和 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.jarLinux:后台运行nohup java -jar xxx.jar
标签: spring boot spring java

本文转载自: https://blog.csdn.net/qq_53462981/article/details/125535628
版权归原作者 鹿鹿啊_ 所有, 如有侵权,请联系我们删除。

“SpringBoot常见面试题总结”的评论:

还没有评论