引言:
SpringBoot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍。因此,SpringBoot已经成为Java 序员面试的必备知识点
1.什么是SpringBoot,Spring,SpringMVC以及它们的区别?
要点:
Spring是一个轻量级的企业级应用的容器,它最重要的特征是依赖注入和AOP。
SpringMVC是一个实现了MVC设计模式的框架,使用分离的方式开发Web应用。简化了Web应用程序的开发。
Spring和SpringMVC都需要大量的配置,Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,删去了繁重的配置,提供了各种启动器,使开发者能快速上手,搭建企业级应用。
2.SpringBoot的核心注解有哪些?
要点:
启动类注解@SpringBootApplication,它包含三个注解:
(1)@SpringBootConfiguration:
(2)@Configuration 注解,实现配置文件的功能。
(3)@EnableAutoConfiguration:打开自动配置的功能
(4)@ComponentScan:Spring组件扫描
3.SpringBoot的Starter有哪些?
要点:
SpringBoot中的Starter相当于模块,它将模块所需的依赖整合起来并对模块内的Bean根据条件进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的包。一站式的集成Spring及其他技术。
spring-boot-starter-web SpringMVC 内嵌的tomcat
spring-boot-starter-data-redis 整合Redis
spring-boot-starter-data-jpa 整合 Spring JPA Hibernate
spring-boot-starter-test 集成测试
spring-boot-starter-security 整合SpringSecurity
mybatis-spring-boot-starter 整合MyBatis
4.SpringBoot的配置文件有哪些?
要点:
SpringBoot默认读取配置文件为application.properties或者是application.yml或者application.yaml(yaml/yml只是扩展名不同而已)。
yml/yaml文件是一种树形结构,可读性强,支持多种(python,go等)语言,支持中文,不支持使用@PropertySource("")注解。properties文件是一种key/value的形式,中文内容只能用unicode编码。相同的目录下有三个配置文件时,优先级properties>yaml>yml
5.SpringBoot的优点?
要点:
(1)快速创建独立运行的spring项目与主流框架集成
(2)使用嵌入式的servlet容器,应用无需打包成war包
(3)starters自动依赖与版本控制
(4)大量的自动配置,简化开发,也可修改默认值
6.SpringBoot的运行方式
要点:
(1)直接运行Main方法启动
(2)使用spring-boot-maven-plugin插件启动
(3)项目打包放到容器中运行
7.什么是JavaConfig
要点:
传统的Spring一般都是基本xml配置的,Spring3.0新增了许多java config的注解。Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法,即基于java配置的spring。常见注解有:
@Configuration 表示配置类
@Bean 等价于 <bean id="obj" class="..." />
@EnableWebMvc 等价于 <mvc:annotation-driven>
@ImportResource 等价于 <import resource="beans.xml">
@PropertySource 读取properties文件
JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。提供了一种类型安全的方法来配置Spring容器。可以按类型而不是按名称检索bean,而不需要任何强制转换。
8.SpringBoot 实现热部署有哪几种方式?
要点:
实际开发过程中,每次修改代码就得将项目重启,重新部署,这个过程需要花费大量的时间成本。为了提高重启效率,提出了热部署的概念。
热部署的基本原理使用了两个ClassLoader(类加载器),一个ClassLoader加载那些不会改变的类(例如第三方jar包),另一个ClassLoader加载会改变的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相对少,所以实现了较快的重启时间。主要有两种实现方式:
(1)Spring Loaded:
Spring Loaded是一个用于在JVM运行时重新加载类文件更改的JVM代理,Spring Loaded允许你动态的新增、修改、删除某个方法、字段、构造方法,同样可以修改作用在类、方法等上的注解。
代码语言:javascript复制<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
</dependencies>
</plugin>
(2)Spring-boot-devtools
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
9.SpringBoot自动配置的原理
要点:
在SpringBoot的应用程序中,所有的运行都起源于@SpringBootApplication注解,它是一个组合注解,等同于以下三个注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
@EnableAutoConfiguration是关键(启用自动配置),内部实际上就去加载META-INF/spring.factories文件的信息,然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置的功能。
10.Spring Boot 支持的日志框架有哪些?
要点:
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。