Spring启动流程
1 SpringBoot自动化配置原理
在项目启动的时候的会自动读取classpath路径下META-INE文件夹下spring.factories文件中的内容
读取就是org.springframework.boot.autoconfigure.EnableAutoConfiguration该键所对应的值,该键所对应的值就是配置类的全类名
然后通过导入器(Importselector)将这个类导入到spring容器中,在该类中所配置的哪些类也被导入到了spring容器中。并配合条件注解来决定当前这个配置是否
要生效。
2 SpringBoot常用注解有哪些?
- @SpringBootApplication
- @ConfigurationProperties(prefic=“”)
- @EnableConfigurationProperties //
- @EnableAutoConfiguration //自动化配置
- @ConditionalOnClass(RedisOperations.class) //指定的类存在于classpath中时,才会创建对应的bean
3 Spring的循环依赖
两个或多个Bean之间相互依赖,形成了一个循环引用。出现循环依赖时,Spring容器无法正确创建这些Bean,会抛出BeanCreationException异常。
-
构造器注入:通过构造函数来注入依赖关系,Spring容器在创建Bean实例时会先调用该类的构造函数进行初始化。这种方式适用于依赖关系比较简单的情况
,可以明确地控制依赖关系,避免出现循环依赖等问题。
-
setter方法注入:通过setter方法来注入依赖关系,Spring容器在创建Bean实例后,通过反射调用setter方法来注入依赖关系。这种方式适用于依赖关系比较
复杂的情况,但是容易出现循环依赖等问题。
-
静态工厂方法:通过静态工厂方法来创建Bean实例,而不是通过构造函数或setter方法。这种方式适用于需要返回特定类型或值的场合,可以避免循环依赖等
问题。
4 Spring和SpringMVC和Springboot和Springcloud的 区别
-
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一系列的模块,用于快速开发各种类型的应用。Spring框架主要关注于解决企业级应用程
序开发中的常见问题,如依赖注入、面向切面编程和事务管理等。
-
Spring MVC是Spring框架的一部分,用于构建Web应用程序。它基于MVC(模型-视图-控制器)设计模式,提供了一种组织和处理Web请求的方式。Spring
MVC具有灵活的配置选项和丰富的功能,允许开发者构建可扩展和高效的Web应用程序。
-
Spring Boot是一个用于简化Spring应用程序开发的框架。它提供了自动配置和约定优于配置的原则,使得开发者可以更轻松地创建独立运行的、生产级别的
Spring应用程序。Spring Boot还集成了许多常见的第三方库和工具,简化了开发过程。
-
Spring Cloud是用于构建分布式系统的一套工具。它基于Spring Boot,并提供了一些额外的功能,如服务发现、负载均衡、断路器等。Spring Cloud使得开发
者可以更容易地构建和管理分布式系统,并提供了一些常见的分布式系统模式的实现。
综上所述,Spring是一个基础框架,Spring MVC是用于构建Web应用程序的模块,Spring Boot是简化Spring开发的框架,而Spring Cloud是构建分布式
系统的工具集。它们可以一起使用,以满足不同类型的应用程序开发需求。
5 项目中用到的Springcloud组件
Cloud架构图
1 项目中使用了哪些组件?
- gateway:网关 实现负载均衡 过滤请求 请求熔断 统一鉴权
- nacos:注册中心、配置中心
- openFeign:远程调用
- sentinel:熔断降级、流量监控
- Seata:分布式事务解决方案
- sleuth:链路追踪
2 Gateway项目中哪些业务使用了?
1 Gateway的组成:
- 断言
- 路由
- 过滤器
2 Gateway的作用
将满足指定要求的请求,经过各个过滤器的过滤后,路由到指定位置
3 Gateway在项目中的使用场景
- 负载均衡: 在项目中gateway工程配置文件中,我们统一制定请求转发模式为 http:// lb:pms-service
- 过滤请求: 在项目中为了解决浏览器同源策略导致的跨域问题
- 跨域问题: 访问域名/端口号/ip地址 信息不同 ,就会存在跨域问题
- 统一鉴权: 利用全局过滤器 在 单点登录对token的校验 实现统一鉴权
- 请求熔断:
3 nacos作用什么? 常见服务注册中心区别?
-
开发语言不同:
Nacos是用Java语言开发的,Eureka是用Java语言开发的,Zookeeper则是用C语言开发的
-
数据一致性协议不同:
-
nacos 注册中心配置中心会根据网络是否有波动动态调整一致性方案如果网络良好, 采用CP如果网络波动,采用AP
-
Eureka从CAP原理考虑保证的是AP,即强调的是可用性,在集群中的节点一旦挂掉一个,整个集群也会提供服务只是数据的一致性无法保证
-
zookeeper从CAP原理考虑保证的是CP,强调一致性 ,在集群中的节点一旦挂掉,会重新选举主节点,选举过程中集群不可用
-
4 解释下远程调用
远程调用是一种计算机编程技术,用于在不同的计算机或进程之间进行通信和交互。它允许一个程序(或进程)通过网络或其他通信方式调用另一个程序(或进
程)中的方法或函数,就像调用本地方法一样。远程调用的目的是实现分布式计算和系统之间的协作。
5 OpenFeign与Feign的区别
- OpenFeign支持springmvc注解 ,Feign不支持
- OpenFeign是springcloud研发的 ,Feign是有Netflix研发
- OpenFeign社区活跃,还在维护,Feign停止维护
6 请求熔断与服务降级区别?
熔断和服务降级是在分布式系统中应对高并发或故障情况的常见策略,它们有一些相似之处,但也有一些差异。
熔断是一种监控和控制系统中服务调用的策略。当服务发生故障或超过预设的阈值时,熔断器会打开,并且在一段时间内拒绝任何对该服务的请求。这样可以防止
故障的服务对整个系统产生连锁效应,并且可以快速失败而不是长时间地等待超时。当熔断器打开后,将会定期检查服务是否恢复正常,如果正常则关闭熔断器,
继续处理请求。
服务降级是在高负载情况下,为了保证核心功能的可用性而主动减少非核心功能的可用性。通过在高压力时关闭一些不重要或消耗较大的功能,可以释放资源给核
心功能使用,以保证核心功能的稳定性和可用性。