SpringBoot微服务

it2024-10-18  37

什么是Spring Boot?

Spring boot是一个简化版的spring项目。

为什么要用springboot?

通过默认值快速开发,减少开发周期。使用javaconfig有助于避免使用xml配置避免大量的maven导入和各种版本冲突。需要更少的配置,因为没有web.xml文件,只需要添加@Configuration注解的类,然后添加@Bean注解的方法,spring将自动加载对象到spring容器中。

springboot的核心注解是哪个?它由哪几个注解组成?

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

3 个注解:

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

@EnableAutoConfiguration(

@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class)组成

):打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描

运行springboot的几种方式?

(1)打包命令 java -jar。

(2)用Maven插件运行。

(3)直接执行main方法。

如何理解springboot中的starters?

Springboot需要独立的容器运行吗?

可以不需要,springboot内置了Tomcat等容器。

Springboot中的监视器是什么?

Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。

如何使用springboot实现异常处理?

https://www.cnblogs.com/lenve/p/10748453.html

@ControllerAdvice注解。这个注解是一个增强的Controller,可以实现三个方面的功能。

1.全局异常处理。

@ControllerAdvice和@ExceptionHandler配合使用

2.全局数据绑定。

@ControllerAdvice和@ModelAttribute配合使用

3.全局数据预处理。

@ControllerAdvice和@InitBinder配合使用

 

springBoot实现热部署有哪几种方式?

引入Spring-boot-devtools依赖,在application.properties中配置devtools

 

Springboot配置加载顺序?

Springboot的核心配置文件有哪几个?他们有什么区别?

 

什么是javaConfig?

JavaConfig提供了配置spring Ioc容器的纯java方法,避免了使用xml配置。

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

2.减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。

JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。

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

如何在SpringBoot中禁用Actuator端点安全性?

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

如何在自定义端口上运行springboot应用程序?

Server.port=8090

什么是spring profiles?

Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。

SpringBoot的配置文件有哪几种格式?他们有什么区别?

.properties和.yml,他们的区别主要是书写方式不同。

@Import注解?

https://www.cnblogs.com/yichunguo/p/12122598.html

快速导入的方式将实例加入到spring Ioc容器中。

@Import的三种用法。

 

SpringBoot启动过程源码分析

springApplication初始化模块

SpringApplication.run()方法时,首先要创建一个SpringApplication对象实例,然后调用这个实例对象的run方法。

SpringApplication实例初始化的时候,会做几件事情:

配置source判断是否为web环境创建初始化构造器,调用getSpringFactoriesinstance方法,通过自动化配置模块,获取初始化构造器所需工厂实例的集合。使用springFactoriesLoder在应用的classpath的MATA-INF/spring.factories查找并加载所有可用的ApplicationContextInitializer。创建应用监听器,调用getSpringFactoriesinstance方法,通过自动化配置模块,获取应用监听器所需工厂实例的集合。使用SpringFactoriesLoader(SpringFactoriesLoader.loadFactoryname)在应用的calsspath的MATA-INF/spring.factories查找并加载所有可用的ApplicationListener。配置应用的主方法所在类。 自动化配置模块

获取传入的类对象,即可获取类加载器,然后使用springfactoriesLoader可以在应用的classpath的MATA-INF/spring.factories找到该类的全限定名对应的值,即可得到与该类(相当于及一个接口)相关的所有工厂类的全限定名(具体实现),然后通过classUtils.forname(name,classloader)可以得到类对象,然后利用反射机制就能够生成工厂类的实例,然后返回工厂类实例集合。

SpringApplication.run启动模块 SpringApplication实例初始化后调用run方法来启动,首先遍历执行所有通过springfactoriesLoader查找并加载的springApplicationRunListener,然后调用started()方法开始监听。创建并配置当前SpringBoot应用将要使用的Environment遍历调用所有SpringApplicationRunListener的environmentPrepared()方法如果springApplication的showbanner属性为true,则打印banner。创建applicationcontext,将之前准备好的environment设置给创建好的applicationcontext使用。通过springfactoriesloader查找并加载classpath中所有可用的applicationcontextInitializer(初始化模块时已经完成),然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法对已经创建好的applicationcontext近一步处理。遍历调用所有SpringApplicationRunListener的contextPrepared()方法最核心的一步,通过@EnableAutoConfiguration获取所有配置以及其他形式的ioc容器配置加载到applicationcontext遍历调用springapplicationrunlistener的contextloaded()方法调用applicationcontext的refresh()方法,完成ioc容器的最后一道工序。查找当前applicationcontext中是否注册有commandlineRunner,如果有,则遍历执行他们。遍历执行springapplicationRunListener的finished()方法

SPI机制(Service Provider Interface)(dubbo,远程过程调用框架使用到了,JDBC也使用到了)

spi机制是jdk内置的服务发现机制,即给定一个接口类对象,他会通过ServiceLoader.load方法到classpath的META-INF/services文件夹下查找对应接口类名的文件,然后获取到文件中定义的实现类全限定名,然后通过Class.forName获得对应的class对象,利用反射机制来创建实现类实例,最终返回一个迭代器,利用迭代器就能够获得所有的实现类实例。

SpringBoot的自动化加载模块就是利用类似SPI机制来实现的。

Springboot自定义spring mvc配置

继承WebmvcConfigurerAdapter抽象类实现WebMvcConfigurer接口

 

 

最新回复(0)