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 的注入。

相关推荐
FrankYoou12 分钟前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*38 分钟前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了1 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
大只鹅1 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
天河归来1 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
weixin_478689761 小时前
十大排序算法汇总
java·算法·排序算法
码荼1 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
IT_10242 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
天涯学馆2 小时前
前端开发也能用 WebAssembly?这些场景超实用!
前端·javascript·面试
ye902 小时前
银河麒麟V10服务器版 + openGuass + JDK +Tomcat
java·开发语言·tomcat