SpringBoot⾯试总结
1、使⽤ Spring Boot 前景?
多年来,随着新功能的增加,spring变得越来越复杂。只需访问spring.io/projects页⾯,我们就会看到可以在我们的应⽤程序中使⽤的所有Spring项⽬的不同功能。
如果必须启动⼀个新的Spring项⽬,我们必须添加构建路径或添加Maven依赖关系,配置应⽤程序服务器,添加spring配置。
因此,开始⼀个新的spring项⽬需要很多努⼒,因为我们现在必须从头开始做所有事情。
Spring Boot是解决这个问题的⽅法。Spring Boot已经建⽴在现有spring框架之上。使⽤spring启动,我们避免了之前我们必须做的所有样板代码和配置。
因此,Spring Boot可以帮助我们以最少的⼯作量,更加健壮地使⽤现有的Spring功能。
2、什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的⼦项⽬,是 Spring 组件⼀站式解决⽅案,主要是简化了使⽤ Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上⼿。
更多 Spring Boot 详细介绍请看这篇⽂章《?》。
3、为什么要使⽤ Spring Boot?
Spring Boot 优点⾮常多,简单来说如:
独⽴运⾏
简化配置
⾃动配置
⽆代码⽣成和XML配置
应⽤监控
上⼿容易
…
减少开发,测试时间和努⼒。
使⽤JavaConfig有助于避免使⽤XML。
避免⼤量的Maven导⼊和各种版本冲突。
提供意见发展⽅法。
通过提供默认值快速开始开发。
没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
需要更少的配置因为没有l⽂件。只需添加⽤@ Configuration注释的类,然后添加⽤@Bean注释的⽅法,Spring将⾃动加载对象并像以前⼀样对其进⾏管理。您甚⾄可以将@Autowired添加到bean⽅法中,以使Spring⾃动装⼊需要的依赖关系中。
基于环境的配置使⽤这些属性,您可以将您正在使⽤的环境传递到应⽤程序:-Dspring.profiles.active = {enviornment}。在加载主应⽤程序属性⽂件后,Spring将在(application{environment} .properties)中加载后续的应⽤程序属性⽂件。
...
4、什么是JavaConfig?
Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java⽅法。因此它有助于避免使⽤XML配置。使⽤JavaConfig的优点在于:
⾯向对象的配置。由于配置被定义为JavaConfig中的类,因此⽤户可以充分利⽤Java中的⾯向对象功能。⼀个配置类可以继承另⼀个,重写它的
@Bean⽅法等。
减少或消除XML配置。基于依赖注⼊原则的外化配置的好处已被证明。但是,许多开发⼈员不希望在XML和Java之间来回切换。
JavaConfig为开发⼈员提供了⼀种纯Java⽅法来配置与XML配置概念相似的Spring容器。
从技术⾓度来讲,只使⽤JavaConfig配置类来配置容器是可⾏的,但实际上很多⼈认为将JavaConfig与XML混合匹配是理想的。
类型安全和重构友好。JavaConfig提供了⼀种类型安全的⽅法来配置Spring容器。由于Java 5.0对泛型的⽀持,现在可以按类型⽽不是按名称检索bean,不需要任何强制转换或基于字符串的查。
5、Spring Boot 的核⼼配置⽂件有哪⼏个?它们的区别是什么?
Spring Boot 的核⼼配置⽂件是 application 和 bootstrap 配置⽂件。
application 配置⽂件这个容易理解,主要⽤于 Spring Boot 项⽬的⾃动化配置。
bootstrap 配置⽂件有以下⼏个应⽤场景。
使⽤ Spring Cloud Config 配置中⼼时,这时需要在 bootstrap 配置⽂件中添加连接到配置中⼼的配置属性来加载外部配置中⼼的配置信息;
⼀些固定的不能被覆盖的属性;
⼀些加密/解密的场景;
具体请看这篇⽂章《》。
6、Spring Boot 的配置⽂件有哪⼏种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同。
1).properties
app.user.name = javastack
2).yml
app:
user:
name: javastack
另外,.yml 格式不⽀持 @PropertySource 注解导⼊配置。
什么是YAML?
YAML是⼀种⼈类可读的数据序列化语⾔。它通常⽤于配置⽂件。
与属性⽂件相⽐,如果我们想要在配置⽂件中添加复杂的属性,YAML⽂件就更加结构化,⽽且更少混淆。可以看出YAML具有分层配置数据。
7、什么是JavaConfig?
Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java⽅法。因此它有助于避免使⽤XML配置。使⽤JavaConfig的优点在于:
⾯向对象的配置。由于配置被定义为JavaConfig中的类,因此⽤户可以充分利⽤Java中的⾯向对象功能。⼀个配置类可以继承另⼀个,重写它的@Bean⽅法等。
减少或消除XML配置。基于依赖注⼊原则的外化配置的好处已被证明。但是,许多开发⼈员不希望在XML和Java之间来回切换。JavaConfig为开发⼈员提供了⼀种纯Java⽅法来配置与XML配置概念相似的Spring容器。
从技术⾓度来讲,只使⽤JavaConfig配置类来配置容器是可⾏的,但实际上很多⼈认为将JavaConfig与XML混合匹配是理想的。
类型安全和重构友好。JavaConfig提供了⼀种类型安全的⽅法来配置Spring容器。由于Java 5.0对泛型的⽀持,现在可以按类型⽽不是按名称检索bean,不需要任何强制转换或基于字符串的查。
8、Spring Boot 的核⼼注解是哪个?它主要由哪⼏个注解组成的?
启动类上⾯的注解是@SpringBootApplication,它也是 Spring Boot 的核⼼注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置⽂件的功能。
@EnableAutoConfiguration:打开⾃动配置的功能,也可以关闭某个⾃动配置的选项,如关闭数据源⾃动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
9、如何重新加载Spring Boot上的更改,⽽⽆需重新启动服务器?
这可以使⽤DEV⼯具来实现。通过这种依赖关系,您可以节省任何更改,嵌⼊式tomcat将重新启动。
Spring Boot有⼀个开发⼯具(DevTools)模块,它有助于提⾼开发⼈员的⽣产⼒。Java开发⼈员⾯临的⼀个主要挑战是将⽂件更改⾃动部署到服务器并⾃动重启服务器。
开发⼈员可以重新加载Spring Boot上的更改,⽽⽆需重新启动服务器。这将消除每次⼿动部署更改的需要。Spring Boot在发布它的第⼀个版本时没有这个功能。
这是开发⼈员最需要的功能。DevTools模块完全满⾜开发⼈员的需求。该模块将在⽣产环境中被禁⽤。它还提供H2数据库控制台以更好地测试应⽤程序。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
10、Spring Boot中的监视器是什么?
Spring boot actuator是spring启动框架中的重要功能之⼀。Spring boot监视器可帮助您访问⽣产环境中正在运⾏的应⽤程序的当前状态。
有⼏个指标必须在⽣产环境中进⾏检查和监控。即使⼀些外部应⽤程序可能正在使⽤这些服务来向相关⼈员触发警报消息。监视器模块公开了⼀组可直接作为HTTP URL访问的REST端点来检查状态。
11、如何在Spring Boot中禁⽤Actuator端点安全性?
默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR⾓⾊的⽤户才能访问它们。
安全性是使⽤标准的HttpServletRequest.isUserInRole⽅法实施的。我们可以使⽤abled = false 来禁⽤安全性。只有在执⾏机构端点在防⽕墙后访问时,才建议禁⽤安全性。
如何在⾃定义端⼝上运⾏Spring Boot应⽤程序?
为了在⾃定义端⼝上运⾏Spring Boot应⽤程序,您可以在application.properties中指定端⼝。
server.port = 8090
12、如何实现Spring Boot应⽤程序的安全性?
为了实现Spring Boot的安全性,我们使⽤ spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其⽅法。
13、如何使⽤Spring Boot实现分页和排序?
使⽤Spring Boot实现分页⾮常简单。使⽤Spring Data-JPA可以实现将可分页的org.springframework.data.domain.Pageable传递给存储库⽅法。
14、开启 Spring Boot 特性有哪⼏种⽅式?
1)继承spring-boot-starter-parent项⽬
2)导⼊spring-boot-dependencies项⽬依赖
具体请参考这篇⽂章《》。
15、Spring Boot 需要独⽴的容器运⾏吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
16、运⾏ Spring Boot 有哪⼏种⽅式?
1)打包⽤命令或者放到容器中运⾏
2)⽤ Maven/ Gradle 插件运⾏
3)直接执⾏ main ⽅法运⾏
17、Spring Boot ⾃动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是⾃动配置的核⼼,⾸先它得是⼀个配置⽂件,其次根据类路径下是否有这个类去⾃动配置。
具体看这篇⽂章《》。
18、Spring Boot 的⽬录结构是怎样的?
cn
+- javastack
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
这个⽬录结构是主流及推荐的做法,⽽在主⼊⼝类上加上 @SpringBootApplication 注解来开启 Spring Boot 的各项能⼒,如⾃动配置、组件扫描等。具体看这篇⽂章《》。
19、你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了⼀系列可以集成到应⽤⾥⾯的依赖包,你可以⼀站式集成 Spring 及其他技术,⽽不需要到处⽰例代码和依赖包。如你想使⽤ Spring JPA 访问数据库,只要加⼊ spring-boot-starter-data-jpa 启动器依赖就能使⽤了。
Starters包含了许多项⽬中需要⽤到的依赖,它们能快速持续的运⾏,都是⼀系列得到⽀持的管理传递性依赖。具体请看这篇⽂章《》。
20、如何在 Spring Boot 启动的时候运⾏⼀些特定的代码?
可以实现接⼝ ApplicationRunner 或者 CommandLineRunner,这两个接⼝实现⽅式⼀样,它们都只提供了⼀个 run ⽅法,具体请看这篇⽂章《》。
21、Spring Boot 有哪⼏种读取配置的⽅式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量,具体请看这篇⽂章《》。
22、Spring Boot ⽀持哪些⽇志框架?推荐和默认的⽇志框架是哪个?
Spring Boot ⽀持 Java Util Logging, Log4j2, Lockback 作为⽇志框架,如果你使⽤ Starters 启动器,Spring Boot 将使⽤ Logback 作为默认⽇志框架,具体请看这篇⽂章《》。
23、SpringBoot 实现热部署有哪⼏种⽅式?
主要有两种⽅式:
Spring Loaded
Spring-boot-devtools
Spring-boot-devtools 使⽤⽅式可以参考这篇⽂章《》。
springboot框架的作用24、你如何理解 Spring Boot 配置加载顺序?
在 Spring Boot ⾥⾯,可以使⽤以下⼏种⽅式来加载配置。
1)properties⽂件;
2)YAML⽂件;
3)系统环境变量;
4)命令⾏参数;
等等……
具体请看这篇⽂章《》。
25、Spring Boot 如何定义多套不同环境配置?
提供多套配置⽂件,如:
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
运⾏时指定具体的配置⽂件,具体请看这篇⽂章《》。
26、保护 Spring Boot 应⽤有哪些⽅法?
在⽣产中使⽤HTTPS
使⽤Snyk检查你的依赖关系
升级到最新版本
启⽤CSRF保护
使⽤内容安全策略防⽌XSS攻击
…
更多请看这篇⽂章《》。
27、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
配置变更
JDK 版本升级
第三⽅类库升级
响应式 Spring 编程⽀持
HTTP/2 ⽀持
配置属性绑定
更多改进与加强…
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论