Java八股文面试之框架篇(SpringBoot)

1.SpringBoot

为什么要用SpringBoot

(1)简化部署

在使用Spring时,项目部署时需要我们在服务器上部署Tomcat,然后把项目打成war包扔到Tomcat里,

在使用SpringBoot后,我们不需要在服务器上去部署Tomcat,因为SpringBoot内嵌了Tomcat,我们只

需要将项目打成jar包就能独立运行,所有的依赖包都在一个jar包内。

(2)简化配置

Spring 虽然是Java EE轻量级框架,但是配置却是极其繁琐的,有各种xml、Annotation配置,一旦出错了是很难找到出错原因的。SpringBoot采用了Java Config 的方式,对spring进行配置。例如我们新建一个类,在这个类中使用@Configuration和@Bean两个注解,@Configuration注解代表该类是个配置类,

@Bean注解表示该方法返回一个Bean对象

(3)自动配置

Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starterweb启动器就能拥有web的功能,无需其他配置。

(4)简化监控

我们可以引入 spring-boot-start-actuator 依赖,直接使用REST方式来获取进程的运行期性能参数,从而

达到监控的目的,比较方便。但是 SpringBoot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要SpringCloud来配合一 起使用。

(5)简化依赖,比如我们要创建一个web项目,在使用spring的时候,需要在pom文件中添加多个依赖;

而SpringBoot则会帮助开发者快速启动一个web容器,在SpringBoot中,我们只需要在pom文件中添加一个

spring-boot-starter-web依赖即可。

SpringBoot的核心注解是什么,它由哪些注解组成?

核心注解是@SpringBootApplication,它也是启动类上的注解,该注解主要包含了以下3个注解:

(1)@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能

(2)@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭

数据源自动配置的功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

(3)@ComponentScan:Spring组件扫描

SpringBoot自动装配原理

(1)自动装配, 简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 容器里面,不需要开发人员再去写 Bean 的相关配置。在 Spring Boot 应用里面, 只需要在启动类上加上@SpringBootApplication 注解就可以实现自动装配。

(2)@SpringBootApplication 是 一 个 复 合 注 解 , 真 正 实 现 自 动 装 配 的 是@EnableAutoConfiguration注解。

①引入 Starter 启动依赖组件的时候, 这个组件里面必须要包含一个@Configuration 注解配置类,而在这个配置类里面通过@Bean 注解声明需要装配到 IOC 容器的 Bean 对象。

②这个配置类是放在第三方的 jar 包里面, 然后通过 SpringBoot 中的约定优于配置思想, 把这个配置类的全路径放在 classpath:/META-INF/spring.factories 文件中。这样SpringBoot 就可以知道第三方 jar 包里面的配置类的位置, 这个步骤主要是用到了 Spring 里面的 SpringFactoriesLoader 来完成。

③SpringBoot 拿到第三方 jar 包里面声明的配置类以后, 再通过 Spring 提供的ImportSelector 接口, 实现对这些配置类

的动态加载。

(3)在我看来, SpringBoot 是约定优于配置这一理念下的产物, 所以在很多的地方,都会看到这类的思想。 它的出现, 让开发人员更加聚焦在了业务代码的编写上,而不需要去关心和业务无关的配置。

(4)其实, 自动装配的思想, 在 SpringFramework3.x 版本里面的@Enable 注解, 就有了实现的雏形。 @Enable 注解是模块驱动的意思, 我们只需要增加某个@Enable 注解, 就自动打开某个功能, 而不需要针对这个功能去做 Bean 的配置, @Enable 注解的底层也是帮我们去自动完成这个模块相关 Bean 的注入。

相关推荐
长谷深风1118 分钟前
Agent 跑了 30 分钟宕机,如何从断点继续?
java·大数据·人工智能·ai·大模型·memory·aiagent
慧都小妮子9 分钟前
DevExpress Java 文档处理 API 免费 CTP:PDF、PowerPoint、条码与跨平台部署
java·pdf·powerpoint·devexpress·文档处理·条码生成
泡海椒11 分钟前
告别反射低效:JQuick-Java ASM动态调用链性能优化实战
java·python·性能优化
土司大王21 分钟前
LeetCode 17 电话号码的字母组合:Java 回溯模板、多叉决策树与复杂度分析
java·leetcode·决策树
行百里er31 分钟前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控
CoderYanger35 分钟前
前端基础——JavaScript(WebAPI)代码案例
java·开发语言·前端·javascript·css·前端框架·html5
Nuanyt1 小时前
JUC常见核心知识梳理02 AQS ReentrantLock CAS 原子类 线程池
java
CodeStats1 小时前
【Java数据类型】Java底层数据类型原理(上):基本类型、转换与封装核心
java·数据类型·string·封装·转换
陈皮波比茶1 小时前
SpringCloudAlibaba
java·spring cloud·微服务
重生之小比特1 小时前
【Java SE】程序逻辑控制
java·开发语言·python