SpringBoot⾼级⾯试题
⾃Spring Boot诞⽣以来,就引起了业界轰动,⽬前越来越多的公司技术选型选择拥抱Spring Boot。所以Spring Boot也成为⾯试必问的问题之⼀。下⾯的问题是⼩胖哥⾯试了很多候选⼈后总结出来的,希望对你有所帮助
问
Spring和Spring Boot有什么区别?
答
Spring Framework提供了多种功能,使Web应⽤程序的开发更加容易。这些功能包括依赖注⼊,数据绑定,⾯向⽅⾯的编程,数据访问等等。
随着Spring社区的壮⼤,Spring慢慢变得越来越复杂,不再像开始宣称的那么轻量级。开发应⽤程序的配置量越来越⼤令开发者头疼。这时Spring Boot就派上⽤场了 - 它采⽤“约定⼤于配置”的思想简化了配置,对Spring提供的功能和配置⽽且将⼀些功能抽象成
为“Starter”开箱即⽤、按需引⽤。极⼤地简化了开发。
问
我们如何使⽤Maven设置Spring Boot应⽤程序?
答
我们可以像在任何其他库中⼀样在Maven项⽬中包含Spring Boot。但是,最好的⽅法是从spring-boot-starter-parent项⽬继承并声明依赖于Spring Boot启动器。这样做可以让我们的项⽬重⽤Spring Boot的默认设置。
继承spring-boot-starter-parent项⽬⾮常简单 - 我们只需要在l中指定⼀个parent元素:
我们可以在Maven 中央仓库到最新版本的 spring-boot-starter-parent。
上⾯的⽅式很⽅便但是并不⼀定符合实际需要。例如公司要求所有项⽬依赖构建从⼀个标准BOM开始,我们就不能按上⾯的⽅式进⾏。
在这种情况下,我们可以进⾏如下引⽤:
然后在 dependencies 标签下引⽤Spring Boot 的starters 就⾏了。
问
Spring boot 中的starter是什么?
答
依赖管理对于项⽬⾄关重要。当项⽬⾜够复杂时,管理依赖项可能会变成⼀场噩梦,因为涉及的组件太多了。
这就是Spring Boot 的starter就派上⽤场了。每个starter都可以为我们提供所需要的Spring技术的⼀站式服务。并且以⼀致的⽅式传递和管理其他所需的依赖关系。
所有官⽅starter都在org.springframework.boot组下,其名称以spring-boot-starter-开头 。⾮官⽅的starter的名称在前,如mybatis-spring-boot-starter。这种命名模式使得查启动器变得很容易,尤其是在使⽤⽀持按名称搜索依赖关系的IDE时。但是这个不是绝对的,有些开发者可能不遵从这种契约。
⽬前⼤概有超过50种官⽅starter。最常⽤的是:
spring-boot-starter: 核⼼启动器,包括⾃动配置⽀持,⽇志记录和YAML
spring-boot-starter-aop: 使⽤Spring AOP和AspectJ进⾏⾯向⽅⾯编程的初学者
spring-boot-starter-data-jpa: 使⽤Spring Data JPA和Hibernate的启动器
spring-boot-starter-jdbc: ⽤于将JDBC与HikariCP连接池⼀起使⽤的启动器
spring-boot-starter-security: 使⽤Spring Security的启动器springboot aop
spring-boot-starter-test: ⽤于测试Spring Boot应⽤程序的启动器
spring-boot-starter-web: 使⽤Spring MVC构建Web的启动器,包括RESTful应⽤程序
其他starter 可去spring.io查询
问
Spring Boot 如何禁⽤特定的⾃动配置?
答
如果我们需要禁⽤特定Spring Boot的⾃动配置,我们可以使⽤@EnableAutoConfiguration注解的exclude属性来指⽰它。如下禁⽤了
DataSourceAutoConfiguration:
如果我们使⽤@SpringBootApplication注解。 它具有@EnableAutoConfiguration作为元注解 - 我们同样可以配置exclude属性来禁⽤⾃动配置:
我们还可以使⽤lude环境属性禁⽤⾃动配置。在application.properties配置⽂件设置如下也可以达到同样的⽬的:
问
Spring Boot 如何注册⾃定义⾃动配置?
答
要注册⾃动配置类,我们必须在META-INF /
spring.factories⽂件的EnableAutoConfiguration 键
下列出其完全限定名称,如果是多个按照以下风格配置:
如果我们使⽤Maven构建⼀个项⽬,那么该⽂件应放在resources / META-INF⽬录中。
问
Spring Boot如何根据不同的条件来加载bean?
答
你可在配置中使⽤@Conditional 系列注解。例如@ConditionalOnMissingBean。此注释的最显着属性是:value:要检查的bean类型
name:要检查的bean的名称
放置在使⽤@Bean装饰的⽅法上时,⽬标类型默认为⽅法的返回类型:
表⽰的意思是如果不存在CustomService类型的bean则初始化并注⼊该bean。
问
如何将Spring Boot Web应⽤程序部署为JAR和 WAR⽂件?
答
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论