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这两个物件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335