SpringBoot的面试题
1.为什么要使用SpringBoot?
SpringBoot优点非常多,如:
1.独立运行:SpringBoot内嵌Tomcat,直接启动即可。同时只需要打成一个可执行的Jar包就能独立运行,所有的依赖包都在一个jar包内。
2.自动配置:添加一个自定义的starter的jar包,就能拥有这个starter的功能,无需其他配置。
3.应用监控:提供一系列端点可以监控服务及应用,做健康检测。
4.无代码生成和xml配置:SpringBoot配置过程中无代码生成,也无需XML的配置文件就能完成所有的配置工作。只使用注解即可。
2.SpringBoot 的约定大于配置,你的理解?
第一:约定大于配置是一种软件设计的规范,他的核心思想就是减少软件开发人员对于配置项的维护,从而让开发人员更加聚焦在业务逻辑上。
第二:基于传统的Spring框架开发web应用,我们需要做很多和业务开发无关并且只需要做一次的配置,比如:
管理JAR包的依赖,web.xml维护等,而在我们SpringBoot上,我们不需要再去做这些繁琐的配置,SpringBoot已经帮我们完成,这就是约定大于配置的思想体现。
第三:体现的方面有很多:
Spring Boot Starter 启动依赖,可以帮我们管理所有的jar包。
SpringBoot的自动装配机制的实现中,通过扫描约定路径下的Spring.factories文件来识别配置类,实现Bean的自动装配。默认加载的配置文件是application.properties;
2.自动装配的原理?
自动装配就是自动把第三方组件的Bean加载到SpringIoc容器里,不需要开发人员再去写Bean的装配配置;
在SpringBoot中,只要在启动类上面加上 @SpringBootApplication注解就可以实现自动装配。@SpringBootApplcation是个复合注解,真正实现自动装配的注解就是 @EnableAutoConfiguration。
首先在main方法中SpringApplication.run(HelloBoot.class,args)的执行流程中有refreshContext(context), 而这个refreshContext(context)内部会解析配置类上自动装配功能的注解 @EnableAutoConfiguration,@EnableAutoConfiguration也是个复合注解,通过@Import注解引入类AutoConfigurationImportSelector。
引入Starter启动依赖组件的时候,这个组件里面必须含有 @Configuration配置类,在这个配置类里面通过 @Bean注解声明需要装配到IOC容器的Bean对象;
这个配置类是放在第三方jar包里面,然后通过springboot约定大于配置的思想,把这个配置类的全路径放在 /META-INF/spring.factories文件中,这样SpringBoot就可以知道第三方jar包里面的配置类的位置,这个主要是通过SpringFactoriesLoader来完成的。SpringBoot拿到第三方jar包里面声明的配置类以后,在通过Spring提供的ImportSelector接口,实现对这些配置类的动态加载。
3.如何理解SpringBoot中的Starter?
主要目的是为了让开发者在开发的过程中只关注于业务逻辑,减少对配置和外部环境的依赖;
starter组件会把对应功能的所有jar包依赖全部倒进来,避免了开发者自己去引入依赖带来的麻烦;
starter内部集成了自动装配机制,也就说在程序中依赖对应的starter组件以后,这个组件会自动集成到Spring生态下,并且对于相关Bean的管理,也是基于自动装配机制来完成的。
依赖Starter组件后,这个组件对应的功能所需要维护的外部化配置,会自动集成到SpringBoot中,我们只需要在application.yml进行维护就可以了。比如redis中的starter,只需要在配置文件中添加链接信息即可。
极大的体现了约定大于配置的思想理念。
第三方维护的starter和官方维护的starter区别在于命名规范上:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${alibaba.druid}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
4.SpringBoot的核心配置文件是什么?
1application和bootstrap
application配置文件主要用于springboot项目的自动化配置;
bootstrap:
在使用springcloudConfig的配置中心时,这时需要在bootstrap配置文件中添加链接到配置中心的配置属性来加载外部配置中心的配置信息。
一些固定不能被覆盖的属性。
5.SpringBoot 有哪几种读取配置的方式?
SpringBoot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量