推荐:
总结——》【SpringBoot】
Spring Boot是将已有的Spring组件整合起来,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
Spring Boot 简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置。
你可以使用Spring Boot创建Java应用,并使用 java -jar启动它或采用传统的war部署方式。同时 Spring Boot 也提供了一个运行“spring 脚本”的命令行工具。
总结的来说:
Spring Boot 让开发变得更简单
Spring Boot 使测试变得更简单
Spring Boot 让配置变得更简单
Spring Boot 让部署变得更简单
Spring Boot 让监控变得更简单
独立运行
:内嵌Tomcat简化配置
:
自动配置
无代码生成和XML配置
应用监控
上手容易
boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
boostrap 里面的属性不能被覆盖
1、bootstrap (.yml 或者 .properties):
2、application (.yml 或者 .properties)
核心注解:@SpringBootApplication
包含3个注解:
1、@SpringBootConfiguration
:配置文件,包含@Configuration 注解
2、@EnableAutoConfiguration
:打开自动配置,也可以关闭某个自动配置
关闭数据源自动配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
3、@ComponentScan
: 实现Spring组件扫描
1、继承spring-boot-starter-parent项目
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.6.RELEASEversion>
parent>
2、导入spring-boot-dependencies项目依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.2.6.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
不需要,内置了 Tomcat/ Jetty 等容器。
1、打包用命令或者放到容器中运行
2、用 Maven/ Gradle 插件运行
3、直接执行 main 方法运行
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
1、SpringBoot在启动时扫描项目依赖的jar包,寻找包含spring.factories文件的jar
2、根据spring.factories配置加载AutoConfigure
3、根据@Conditional注解的条件,进行自动配置并将bean注入到Spring Context
1、@EnableAutoConfiguration这个注解会"猜"你将如何配置spring,前提是你已经添加了jar依赖项,如果spring-boot-starter-web已经添加Tomcat和SpringMVC,这个注释就会自动假设您在开发一个web应用程序并添加相应的spring配置,会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中bean
2、在main方法中加上@SpringBootApplication和@EnableAutoConfiguration
1、properties文件;
2、YAML文件;
3、系统环境变量;
4、命令行参数;
等等……
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
● 在生产中使用HTTPS
● 使用Snyk检查你的依赖关系
● 升级到最新版本
● 启用CSRF保护
● 使用内容安全策略防止XSS攻击
● …
Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。
优点:
(1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
(2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
(3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
这可以使用 SpringBoot 中的开发工具(DevTools)模块
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
Springboot actuator 是 spring 启动框架中的重要功能之一。
功能:
监控生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。
即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。
监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。
在application.properties 中指定端口。server.port = 8090
YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。
Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。SpringBoot 使得使用配置文件非常简单。
Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。
我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。
CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
Spring Boot 提供监视器端点以监控各个微服务的度量。
这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。
但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。 它建立在 SpringBoot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。
1、spring程序是如何启动的?
2、spring是如何加载配置文件到应用程序的?
3、掌握核心接口BeanDefinitionReader
4、掌握核心接口BeanFactory
5、彻底搞懂Spring的refresh方法
6、BeanPostProcessor接口的作用及实现
7、BeanFactoryPostProcessor接口的作用及实现
8、Spring Bean有没有必要实现Aware接口
9、彻底理解bean的生命周期
10、循环依赖问题
11、factoryBean接口的作用
12、bean的初始化都经历了什么
13、cglib和jdk动态代理的机制
14、aop是如何处理的
15、如何回答spring相关的问题