SpringBoot问题

简介: SpringBoot问题

1.Springboot自动装配过程



1.通过注解

@SpringBootApplication=>@EnableAutoConfiguration=>@Import({AutoConfigurationImportSelector.class})


2.AutoConfigurationImportSelector类中重写了ImportSelector中selectImports方法,批量返回需要装配的配置类


3.通过Spring提供的SpringFactoriesLoader机制,扫描classpath下的META-INF/spring.factories文件,读取需要自动装配的配置类


4.依据条件筛选的方式,把不符合的配置类移除掉,最终完成自动装配


2.已经有了Spring为什么还要设计SpringBoot?



Spring 通常指的是 Spring framework 。通常 Java 开发就是面向对象开发、面向抽象接口开发。而软件项目大多都是“堆积木”,随着版本迭代会越来越大,这造成了个很大的问题就是对象的管理。刚好 Spring 的控制反转,依赖注入,切面编程的特性对这些类生命周期的管理,组件模块化,基础层和业务分离解耦提供了很大的便利。就像粘合剂一样把各种功能的库“粘”到一起,让它们协同工作。


除了上图中的一些功能特性外,Spring framework 另外有个很少被提及的特点,它很少去造轮子,它只作上层的适配,作为一个中间抽象层。这种好处在于灵活,使用者可以根据场景切换技术栈;另外这成就了 Spring framework 成为事实上 J2EE 的标准。 Spring framework 已经成为 Java 开发必须掌握的基本框架,很多时候我们开发就是跟它打交道。


Spring framework 经过数年的迭代已经丧失了轻量级的标签。在享受 Spring framework 带来的便利的同时,我们又进入了另一个噩梦:大量的 XML 配置。 Spring 使用者不单单要写业务代码,还要通过编写对应的 XML 配置,引入其它组件或者功能类库也要进行繁琐的适配,这偏离了 Spring framework 最初设计的初衷。所以 Spring Boot 被设计出来。


Spring Boot 将 Spring framework 的功能进行了扩展,将繁琐的配置功能进行了内部整合,通过一些自动化的配置和类似 SPI 的发现机制来自动感知功能组件,大大降低了使用成本,而且保证了和Spring framework 的一致性。


SpringBoot优点:


简便

Spring Boot可以快速通过引导式的步骤搭建一个生产级企业应用开发平台,而无需繁琐的配置。而且提供了默认配置,甚至你可以达到零配置接入。


灵活

Spring Boot同时对常用的功能进行了组件化的抽象,可以按需引用。另外也指定了一揽子的组件规范让开发者可以自行实现符合 Spring Boot 风格的组件(Starter),让你实现插件化开发。


集中

每一个版本的依赖都经过测试和挑选,对各个组件进行了集中管理,构成一个 parent 集合,减少了依赖冲突的可能性。


敏捷

Spring Boot通过一些注解简化了之前的开发和配置,减少了模板代码的编写,加快了开发速度。内置Web 容器甚至可以以 Jar 的方式快速部署运行。


两者之间的关系


Spring framework 和 Spring Boot 的根本是一致的。Spring Boot 是 Spring framework 的引导程序以简化其配置和使用。而Spring framework 是 Spring Boot 的基础,Spring Boot 无法脱离 Spring framework 。用户通过上层 Spring Boot 的引导来使用 Spring framework 。


3.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?



启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下


3 个注解:

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

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。


4.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?



Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。


Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。


5.Spring Boot 中如何实现定时任务 ?



定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled[ˈskedʒuːld] 注解,另一个则是使用第三方框架 Quartz。

相关文章
|
Java 索引
String字符串常用函数以及示例 JAVA基础
String字符串常用函数以及示例 JAVA基础
157 1
|
C++ 索引 容器
c++string容器-子串获取讲解
c++string容器-子串获取讲解
641 0
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
10月前
|
关系型数据库 MySQL 应用服务中间件
测评部署和管理 WordPress 最方便的面板
本文介绍了如何使用Websoft9面板轻松搭建WordPress网站,相比宝塔和1Panel,Websoft9简化了Nginx和MySQL的配置步骤,实现了快速一键部署。用户只需在应用商店中搜索WordPress,选择版本和端口后等待几分钟即可完成安装,随后通过提供的链接进入WordPress界面,轻松启动个人网站。
|
监控 项目管理
软件工程IT项目管理复习之 十一:项目风险管理
软件工程IT项目管理复习之 十一:项目风险管理
795 0
|
网络协议 安全 网络安全
什么是 SOCKS5 代理,它最适合做什么?
SOCKS代理是用于穿透防火墙,使客户端能与服务器通信的协议,它不依赖特定的协议或程序。作为第5层协议,SOCKS能处理HTTP、HTTPS等请求,但不支持低于第5层的协议。SOCKS4与SOCKS5的区别在于身份验证和UDP支持,SOCKS5提供更强的安全性,如通过SSH加密。SOCKS代理通过指定服务器路由流量,隐藏IP地址,常用于网页抓取和避免IP封锁。虽然能隐藏位置,但不保证数据安全,不如VPN加密。SOCKS5代理的优点包括:受防火墙保护的服务访问、更快的P2P性能、无需特殊设置、提高性能和可靠性,特别是通过UDP协议实现。
|
分布式计算 搜索推荐 算法
推荐系统的数学模型-从矩阵分解到推荐系统(Scala实现)
推荐系统的数学模型-从矩阵分解到推荐系统(Scala实现)
230 0
|
数据可视化 数据挖掘
Seaborn中的关系图:探索变量之间的关联
【4月更文挑战第17天】Seaborn库助力探索变量间关联,提供散点图、箱形图、条形图、计数图、热力图和相关图等工具。散点图用于连续变量关系,箱形图展示数值变量分布,条形图对比类别与数值变量,计数图显示类别频率,热力图揭示两类变量交叉表,相关图则呈现多变量两两相关性。选择合适图表能提升数据分析效果。
|
存储 NoSQL Cloud Native
阿里云Redis的性能优势
随着云计算和容器技术的不断发展,云原生数据库的使用在企业中变得越来越普遍。阿里云Redis是一种开放式的云原生数据库服务,协议兼容Redis,具有非常快速的读写速度。该服务的高可用性和强大的集群功能使它成为企业首选的数据库类型。本文介绍阿里云Redis的性能优势,包括快速响应时间、高可伸缩性和极佳的吞吐量。
394 1
|
NoSQL Linux Android开发
OPENJTAG调试学习(四):OpenJTAG 来烧写、调试 cortex M3
OPENJTAG调试学习(四):OpenJTAG 来烧写、调试 cortex M3
314 0