SpringBoot概述

前言

Spring是JavaEE的轻量级代替品。无需开发重量级的EJB,Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象POJO实现了EJB的功能

使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑 。它可以提供众多服务,事务管理,WS等。 AOP特性方便面向切面编程。另外也对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等。Spring属于低侵入,代码污染极低,并且高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部。

​ 但是Spring的组件配置是重量级的。而且Spring的大部分配置都是使用xml进行配置的。SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

介绍

Spring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。**我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件。**简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。

SpringBoot的特点

  1. 为基于Spring的开发提供更快的入门体验
  2. 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
  3. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

Spring Boot重要核心点

起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能

自动配置

​ Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

命令行界面

这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。

Actuator

让你能够深入运行中的Spring Boot应用程序,一探究竟。

核心功能

1)独立运行的 Spring 项目

​ Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。

2)内嵌 Servlet 容器

​ Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。

3)提供 starter 简化 Maven 配置

​ Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入依赖包。

4)自动配置 Spring

​ Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot 只是考虑了大多数的开发场景,并不是所有的场景,若在实际开发中我们需要自动配置 Bean,而 Spring Boot 没有提供支持,则可以自定义自动配置。

5)准生产的应用监控

​ Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。

6)无代码生成和 xml 配置

​ Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。

内部处理

SpringBoot 默认集成了 Tomcat 容器,Spring Boot 默认的启动端口8080,通过 Main 方法编写的 SpringApplication.run 方法即可启动内置 Tomcat。在启动类里加入 @SpringBootApplication 注解,则这个类就是整个应用程序的启动类。Spring Boot 还有一个特点是利用注解代码繁琐的 XML 配置,整个应用程序只有一个入口配置文件,那就是 application.yml 或 application.properties。

Spring Boot将容器内置后,它通过配置文件的方式类修改相关server配置

打包、运行

Spring Boot Maven Plugin插件提供spring boot在maven中的支持。允许你打包可运行的jar包或war包。插件提供了几个maven目标和Spring Boot 应用一起工作。总的有:

1、spring-boot:repackage

2、spring-boot:run

3、spring-boot:start and spring-boot:stop

4、spring-boot:build-info

例如下图所示,另外打包成WAR 把jar替换即可:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaMai26j-1684135794167)(/Users/zhaoyanhong/Library/Application Support/typora-user-images/image-20230515150421336.png)]

常用的起步依赖

spring-boot-starter-parent 核心pom,包含对自动配置、日志库、yaml配置文件的支持,所有springboot项目都需要继承。

spring-boot-starter-web 对web开发的支持,内置的tomcat、springmvc的坐标、jackson的坐标

spring-boot-starter-tomcat 使用内置的tomcat

spring-boot-starter-jetty 使用内置的jetty

spring-boot-starter-log4j 对log4j的支持

spring-boot-starter-test 对测试的支持,包含了junit.jar、spring-test.jar等的坐标

spring-boot-starter-jdbc 对jdbc的支持

spring-boot-starter-data-mongodb 对mongondb的支持

spring-boot-starter-velocity 对velocity模板引擎的支持

spring-boot-starter-aop 对aop(Spring AOP、AspectJ)的支持

spring-boot-starter-websocket 对websocket的支持

spring-boot-starter-amqp 对AMQP消息队列的支持

​ 所谓支持,是说集成了相关依赖的坐标。有些起步依赖又包含了其它的起步依赖,比如spring-boot-starter-web包含了spring-boot-starter-tomcat,所以使用web时就不必再使用tomcat。

Spring Boot常用注解

1、@SpringBootApplication

这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

其实这个注解就是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解。

2、@EnableAutoConfiguration

允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。

如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。

3、@Configuration

这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。

4、@SpringBootConfiguration

这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。

5、@ComponentScan

这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。

6、@Conditional

这是 Spring 4.0 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。

7、@ConditionalOnBean

组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。

8、@ConditionalOnMissingBean

组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。

9、@ConditionalOnClass

组合 @Conditional 注解,当容器中有指定的 Class 才开启配置。

10、@ConditionalOnMissingClass

组合 @Conditional 注解,和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。

11、@ConditionalOnWebApplication

组合 @Conditional 注解,当前项目类型是 WEB 项目才开启配置。

12、@ConditionalOnNotWebApplication

组合 @Conditional 注解,和 @ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。

13、@ConditionalOnProperty

组合 @Conditional 注解,当指定的属性有指定的值时才开启配置。

14、@ConditionalOnExpression

组合 @Conditional 注解,当 SpEL 表达式为 true 时才开启配置。

15、@ConditionalOnJava

组合 @Conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置**。**

16、@ConditionalOnResource

组合 @Conditional 注解,当类路径下有指定的资源才开启配置。

17、@ConditionalOnJndi

组合 @Conditional 注解,当指定的 JNDI 存在时才开启配置。

18、@ConditionalOnCloudPlatform

组合 @Conditional 注解,当指定的云平台激活时才开启配置。

19、@ConditionalOnSingleCandidate

组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。

20、@ConfigurationProperties

用来加载额外的配置(如 .properties 文件),可用在 @Configuration 注解类,或者 @Bean 注解方法上面。

21、@EnableConfigurationProperties

一般要配合 @ConfigurationProperties 注解使用,用来开启对 @ConfigurationProperties 注解配置 Bean 的支持。

22、@AutoConfigureAfter

用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。如 Mybatis 的自动配置类,需要在数据源自动配置类之后。

@AutoConfigureAfter(DataSourceAutoConfiguration.class)

public class MybatisAutoConfiguration {

23、@AutoConfigureBefore

这个和 @AutoConfigureAfter 注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。

24、@Import

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。

25、@ImportResource

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。

SpringBoot相关问题

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

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

2、@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能。主要用于给容器导入META-INF/spring.factories 里定义的自动配置类。筛选有效的自动配置类,每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

3、@ComponentScan:Spring组件扫描。

什么是 JavaConfig?

1、面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。

2、减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。

3、类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

什么是YAML?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据

4、bootstrap.yml和application.yml有什么区别?

1、Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。

2、application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

3、bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。

4、bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。

5、这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。

6、bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

7、boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载

8、boostrap 里面的属性不能被覆盖

5、springboot常用的starter有哪些?

1、spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)

2、spring-boot-starter-data-jpa (数据库支持)

3、spring-boot-starter-data-redis (redis数据库支持)

4、spring-boot-starter-data-solr (solr搜索应用框架支持)

5、mybatis-spring-boot-starter (第三方的mybatis集成starter)

6、Spring Boot 配置加载顺序?

1、properties文件

2、YAML文件

3、系统环境变量

4、命令行参数

7、Spring Boot 有哪几种读取配置的方式?

@PropertySource

@Value

@Environment

@ConfigurationPropertie

8、如何使用Spring Boot实现异常处理?

​ SpringControllerAdvice提供了一种使用处理异常的非常有用的方法。使用 @ControllerAdvice + @ExceptionHandler 注解处理全局异常(value后面可以填写数组)

img

9、如何重新加载 Spring Boot上的更改,而无需重新启动服务器?

​ **使用DEV工具来实现。**通过这种依赖关系,可以节省任何更改,嵌入式 tomcat将重新启动。

​ 使用Spring Boot有一个开发工具Dev Tools模块,可以重新加载 Spring Boot上的更改,而无需重新启动服务器。消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

10、Spring Boot中的监视器是什么?

Spring boot actuator是Spring启动框架中的重要功能之一Spring boot监视器可访问生产环境中正在运行的应用程序的当前状态有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 http url rest访问的REST端点来检查状态。

11、Spring Boot监听器流程?

1、通过app.addListeners注册进入

2、初始化一个SpringApplicationRunListeners进行处理

3、从spring.factories中读取监听器处理类EventPublishingRunListener

4、通过createSpringFactoriesInstances创建监听器处理类实例

5、调用监听器listeners.starting()的方法来启动。

6、底层把事件处理交给线程池去处理

12、Spring Boot初始化环境变量流程?

1、调用prepareEnvironment方法去设置环境变量

2、接下来有三个方法getOrCreateEnvironment,configureEnvironment,environmentPrepared

3、getOrCreateEnvironment去初始化系统环境变量

4、configureEnvironment去初始化命令行参数

5、environmentPrepared当广播到来的时候调用onApplicationEnvironmentPreparedEvent方法去使用postProcessEnvironment方法load yml和properties变量

13、Spring Boot扫描流程?

1、调用run方法中的refreshContext方法

2、用AbstractApplicationContext中的refresh方法

3、委托给invokeBeanFactoryPostProcessors去处理调用链

4、其中一个方法postProcessBeanDefinitionRegistry会去调用processConfigBeanDefinitions解析beandefinitions

5、在processConfigBeanDefinitions中有一个parse方法,其中有componentScanParser.parse的方法,这个方法会扫描当前路径下所有Component组件

14、如何在 Spring Boot中禁用 Actuator端点安全性?

​ 默认情况下,所有敏感的HTTP端点都是安全的只有具有 http ACTUATOR角色的用户才能访问它们。安全性是使用标准的 httpservletrequest. isuserinrole…isusernrole方法实施的。可以使用 management. security. enabled= false来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

15、如何实现 Spring Boot应用程序的安全性?

使用 spring–startersecurityboot–依赖项,并且必须添加安全配置。配置类将必须扩展 WebSecurityConfigurerAdapter并覆盖其方法。

16、什么是 Spring Batch?

Spring Boot Batch提供可重用的函数,这些函数在处理大量记录时非常重要;包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

Spring Boot 扩展

SpringBoot集成MySQL(JPA,MyBatis,MyBatis-Plus)

SpringBoot集成ShardingJDBC(分表分库,读写分离,多租户)

SpringBoot集成连接池(HikariCP,Druid)

SpringBoot集成数据迁移(Liquibase,Flyway)

SpringBoot集成PostgreSQL(JPA,MyBatis-Plus,Json)

SpringBoot集成Redis(Jedis,Luttue,Redission)

SpringBoot集成其它NoSQL数据库(MongoDB,ElasticSearch,Noe4J)

SpringBoot集成Websocket(socket,netty)

SpringBoot集成定时任务(springtask,quartz,elastic-job,xxl-job)

SpringBoot集成视图解析(Thymeleaf,FreeMarker,Velocity,JSP,VueJS)

SpringBoot集成缓存(Caffeine,EhCache,CouchBase)

SpringBoot集成认证授权(SpringSecurity,Shiro,Oauth2,SA-Token,Keycloak)

SpringBoot集成文档操作(上传,PDF,Excel,Word)

SpringBoot集成消息队列(ActiveMQ,RabbitMQ,ZeroMQ,Kafka)

SpringBoot集成通知(Email,短信,钉钉,微信)

SpringBoot集成文件系统(minIO,aliyun,tencentCloud,FastDFS)

SpringBoot集成工作流引擎(activi,jBPM,flowable)

SpringBoot集成其它功能(支付,OPC-UA,JavaFX2)

SpringBoot应用部署(jar,war,linux,docker,docker-compose)

SpringBoot集成监控(actuator,springboot-admin,ELK,Grafana,APM)

总结

步骤

Spring的组件配置重量级-》约定大于配置-》Maven项目对象模型-》起步依赖(启动读取配置文件注解、自动配置注解、组件扫描主键)-》通过配置文件的方式类修改相关server的默认配置信息-》打包运行

特点

Jar包形式运行
内嵌Servlet容器Tomcat
简化Maven依赖加载
自动配置
应用监控
无代码生成和XML配置
打包简单

必备核心注解

1、@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
2、@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能。
3、@ComponentScan:Spring组件扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值