SpringBoot 面试题
Spring Boot、Spring MVC 和 Spring 有什么区别?
Spring:
Spring 框架的特征是依赖注入。所有 Spring 模块不是依赖注入就是 IOC 控制反转。
SpringMVC:
Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 等一些简单的概念,开发 Web 应用将会变的非常简单。
SpringBoot:
Spring 和 SpringMVC 的问题在于需要配置大量的参数,Spring Boot 则通过一个自动配置和启动的项来目解决这个问题。简省了繁重的配置,能快速上手。
为什么要用SpringBoot?
Spring Boot 优点非常多,如:
独立运行
简化配置
简化部署
上手容易
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置
@ComponentScan:Spring组件扫描。
什么是自动配置?
Spring 查看已存在的应用程序的配置。在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。
开启 Spring Boot 特性有哪几种方式?
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
如何在 Spring Boot 启动的时候运行一些特定的代码?
可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法
Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量
什么是 Spring Boot Stater ?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包
例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进行。
Spring Boot 还提供了其它的哪些 Starter Project Options?
spring-boot-starter-web - Web 和 RESTful 应用程序
spring-boot-starter-test - 单元测试和集成测试
spring-boot-starter-jdbc - 传统的 JDBC
spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA
spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权
spring-boot-starter-logging - 使用 logback 进行日志记录
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架
SpringBoot 实现热部署有哪几种方式?
主要有两种方式:
Spring Loaded
Spring-boot-devtools
为什么我们需要 spring-boot-maven-plugin?
spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。
spring-boot:run 运行你的 SpringBooty 应用程序。
spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行
spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期(也可以说是为了集成测试)。
spring-boot:build-info 生成执行器可以使用的构造信息。
Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
Spring Boot 如何定义多套不同环境配置?
提供多套配置文件
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。
RequestMapping 和 GetMapping 的不同之处在哪里?
RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。
JPA 和 Hibernate 有哪些区别?
JPA 是一个规范或者接口
Hibernate 是 JPA 的一个实现
SpringBoot热部署?
Spring Boot有一个开发工具(DevTools)模块,它将文件更改自动部署到服务器并自动重启服务器。
什么是YAML?
YAML是一种人类可读的数据序列化语言。它通常用于配置文件。
总结Spring Boot Starter的工作原理
Spring Boot Starter的工作原理如下:
1. Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR
2. 根据spring.factories配置加载AutoConfigure类
3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context
谈谈你对Spring Boot的认识
spring Boot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。
springboot配置监听器、过滤器和拦截器
监听器继承HttpSessionListener
过滤器继承Filter
拦截器继承HandlerInterceptor
配置类注解@Configuration实现WebMvcConfigurer
拦截器过滤器的区别
拦截器可以访问action上下文、值栈里的对象而过滤器不能
拦截器只能对action请求起作用,拦截器可以多次被调用,过滤器可以对几乎所有的请求起作用
Filter在Servlet前后作用,Interceptor在方法的前后作用,异常抛出前后,具有更大的弹性。所以优先使用拦截器。
springboot常用注解?
@SpringBootApplication
在系统启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解
@Controller 和 @RestController
原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@RequestMapping
一个用来处理请求地址映射的注解,可用于类或方法上
@RequestBody和@ResponseBody
@RequestBody注解允许request的参数在reqeust体中,常常结合前端POST请求,进行前后端交互。
@ResponseBody注解支持将的参数在reqeust体中,通常返回json格式给前端。
@PathVariable、@RequestParam、@RequestAttribute
@PathVariable用来接收参数,如/path/001,可接收001作为参数
@RequestParam 用来接收URL中的参数,如/param?id=001,可接收001作为参数
@RequestAttribute用于访问由过滤器或拦截器创建的、预先存在的请求属性,效果等同与request.getAttrbute().
@Component、@Service、@Repository
@Component 最普通的组件,可以被注入到spring容器进行管理
@Repository 作用于持久层
@Service 作用于业务逻辑层
通常一些类无法确定是使用@Service还是@Component时,注解使用@Component,比如redis的配置类等
@ModelAndView
ModelAndView是SpringMVC视图机制,代表了Spring Web MVC中呈现画面时所使用的Model与View,由于Java一次只能返回一个物件,所以ModelAndView的作用封装这两个物件,以方便您一次返回Model与View这两个物件。