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

相关推荐
Ciderw12 分钟前
MySQL日志undo log、redo log和binlog详解
数据库·c++·redis·后端·mysql·面试·golang
m0_7482359522 分钟前
SpringBoot:解决前后端请求跨域问题(详细教程)
java·spring boot·后端
LUCIAZZZ37 分钟前
简单说一下什么是RPC
java·网络·网络协议·计算机网络·spring cloud·rpc
嘵奇40 分钟前
最新版IDEA下载安装教程
java·intellij-idea
s_fox_1 小时前
Nginx Embedded Variables 嵌入式变量解析(4)
java·网络·nginx
一个 00 后的码农1 小时前
25旅游管理研究生复试面试问题汇总 旅游管理专业知识问题很全! 旅游管理复试全流程攻略 旅游管理考研复试真题汇总
考研·面试·面试问题·考研复试·旅游管理·复试调剂·面试真题
Jelena157795857921 小时前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
数据小小爬虫1 小时前
Jsoup解析商品详情时,如何确保数据准确性?
java·爬虫
V+zmm101341 小时前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
坚定信念,勇往无前2 小时前
springboot单机支持1w并发,需要做哪些优化
java·spring boot·后端