Spring容器扩展点在微服务中的使用

这篇具有很好参考价值的文章主要介绍了Spring容器扩展点在微服务中的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Spring扩展点梳理

  • BeanFactoryPostProcessor
    • BeanDefinitionRegistryPostProcessor bean注册后置处理器
  • BeanPostProcessor
    • InstantiationAwareBeanPostProcessor
    • AbstractAutoProxyCreator
  • @Import
    • ImportBeanDefinitionRegistrar
    • ImportSelector
  • Aware
    • ApplicationContextAware
    • BeanFactoryAware
  • InitializingBean || @PostConstruct
  • FactoryBean
    • mybatis feign 实现
  • SmartInitializingSingleton
  • ApplicationListener
  • Lifecycle
    • SmartLifecycle
    • LifecycleProcessor
  • HandlerInterceptor
    • springmvc拦截器
  • MethodInterceptor
    • 切面中的拦截器

Bean生命周期主线流程:

https://www.processon.com/view/link/5eafa609f346fb177ba8091f

2.Spring扩展点应用场景

2.1 整合Nacos

ApplicationListener扩展场景——监听容器中发布的事件

思考: 为什么整合Nacos注册中心后,服务启动就会自动注册,Nacos是如何实现自动服务注册的?
Spring容器扩展点在微服务中的使用,spring,spring

NacosAutoServiceRegistration

​ # 对ApplicationListener的扩展 AbstractAutoServiceRegistration#onApplicationEvent # 服务注册 》NacosServiceRegistry#register

​ 监听 WebServerInitializedEvent 这个事件
Spring容器扩展点在微服务中的使用,spring,spring

Lifecycle扩展场景——管理具有启动、停止生命周期需求的对象

介绍: https://www.jianshu.com/p/7b8f2a97c8f5

NacosWatch

​ #对SmartLifecycle的扩展 NacosWatch#start #订阅服务接收实例更改的事件 》NamingService#subscribe


Spring容器扩展点在微服务中的使用,spring,spring

扩展: Eureka Server端上下文的初始化是在SmartLifecycle#start中实现的

EurekaServerInitializerConfiguration

Spring容器扩展点在微服务中的使用,spring,spring

Eureka Server源码分析:

Spring容器扩展点在微服务中的使用,spring,spring

2.2 整合Ribbon

SmartInitializingSingleton扩展场景—— 对容器中的Bean对象进行定制处理

思考:为什么@Bean修饰的RestTemplate加上@LoadBalanced就能实现负载均衡功能?

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

LoadBalancerAutoConfiguration

对SmartInitializingSingleton的扩展,为所有用@LoadBalanced修饰的restTemplate(利用了@Qualifier)绑定实现了负载均衡逻辑的拦截器LoadBalancerInterceptor

Spring容器扩展点在微服务中的使用,spring,spring

LoadBalancerInterceptor

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

2.3 整合Feign

FactoryBean的扩展场景——将接口生成的代理对象交给Spring管理

思考:为什么Feign接口可以通过@Autowired直接注入使用?Feign接口是如何交给Spring管理的?

     @FeignClient(value = "mall-order",path = "/order")
public interface OrderFeignService {

    @RequestMapping("/findOrderByUserId/{userId}")
    R findOrderByUserId(@PathVariable("userId") Integer userId);
}

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    OrderFeignService orderFeignService;

    @RequestMapping(value = "/findOrderByUserId/{id}")
    public R  findOrderByUserId(@PathVariable("id") Integer id) {
        //feign调用
        R result = orderFeignService.findOrderByUserId(id);
        return result;
    }
}  

FeignClientsRegistrar

Spring容器扩展点在微服务中的使用,spring,spring

FeignClientFactorybean

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

SmartInitializingSingleton&FactoryBean结合场景——根据类型动态装配对象

SentinelDataSourceHandler

#Sentinel持久化读数据源设计,利用了SmartInitializingSingleton扩展点
SentinelDataSourceHandler#afterSingletonsInstantiated
# 注册一个FactoryBean类型的数据源 
》SentinelDataSourceHandler#registerBean 注册bean定义,通过beanFactory.getBean创建bean
》》NacosDataSourceFactoryBean#getObject
# 利用FactoryBean获取到读数据源
》》new NacosDataSource(properties, groupId, dataId, converter)

Spring容器扩展点在微服务中的使用,spring,spring

NacosDataSourceFactoryBean
Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring

Spring容器扩展点在微服务中的使用,spring,spring文章来源地址https://www.toymoban.com/news/detail-535213.html

到了这里,关于Spring容器扩展点在微服务中的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 中的微服务架构:原理和使用

    微服务架构是一种软件架构模式,它将一个应用程序分解成一组小的、松散耦合的服务。每个服务都有独立的进程和数据存储,可以独立地开发、部署、测试和扩展。这种架构模式可以带来更高的灵活性、可靠性和可扩展性,使得开发人员可以更快地开发和部署新的功能。

    2024年02月11日
    浏览(105)
  • Spring Boot 中的服务注册是什么,原理,如何使用

    Spring Boot 是一个非常流行的 Java 后端框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发微服务应用。其中,服务注册是 Spring Boot 微服务架构中非常重要的一环。在本文中,我们将深入探讨 Spring Boot 中的服务注册是什么,原理以及如何使用。 服务注册是

    2024年02月12日
    浏览(48)
  • Spring Cloud Gateway:打造可扩展的微服务网关

    🎉欢迎来到架构设计专栏~Spring Cloud Gateway:打造可扩展的微服务网关 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限

    2024年02月08日
    浏览(72)
  • 使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

            Feign是一个声明式的 HTTP客户端框架 ,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。         Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下,在微服务

    2024年02月15日
    浏览(41)
  • 构建弹性可扩展的微服务架构:基于Spring Cloud Alibaba 的实践

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 随着互联网业务的不断发展,传统的单体应用逐渐无法满足日益复杂的业务需求和

    2024年02月14日
    浏览(297)
  • Spring Boot 如何使用 Web 容器

    在使用 Spring Boot 进行开发时,我们通常需要使用 Web 容器来处理 HTTP 请求和响应。本文将介绍 Spring Boot 如何使用 Web 容器,包括如何配置 Web 容器、如何处理 HTTP 请求和响应等内容,并提供相应的代码示例。 Spring Boot 中默认使用 Tomcat 作为 Web 容器,但是也支持其他的 Web 容器

    2024年02月11日
    浏览(39)
  • spring复习:(55)注解配置的情况下@ComponentScan指定的包中的组件是怎么被注册到容器的?

    配置类: 主类: 结论:是在context.refresh()处完成扫描和注册的。 fresh()的代码片段如下: 其中调用的invokeBeanFactoryPostProcessor代码如下: 其中调用的静态方法invokeBeanFactoryPostProcessors代码如下: 其中包含如下代码片段: invokeBeanDefinitionRegisteyPostProcessor的代码如下: 其中调用的

    2024年02月15日
    浏览(42)
  • 使用@Configuration和@Bean给spring容器中注入组件

    以前我们是使用配置文件来注册bean的,现如今可以用@Configuration 来代替配置文件。

    2024年02月11日
    浏览(40)
  • Spring Cloud中的服务路由与负载均衡

    本文将讨论Spring Cloud中的服务路由问题,包括服务发现、服务注册、服务消费、服务提供以及服务路由实现。 在微服务架构中往往需要根据服务名来调用服务。此时服务发现就变得非常重要。在Spring Cloud中可以通过在 pom.xml 文件中引入 spring-cloud-starter-netflix-eureka-server 依赖来

    2024年02月06日
    浏览(40)
  • 微服务 Spring Cloud 6,用了这么多年Docker容器,殊不知你还有这么多弯弯绕

    大家好,我是哪吒。 单体应用拆分成微服务后,能够实现快速开发迭代,但因为小服务太多,导致测试和部署的成本提高。 单体应用中,将Spring Boot工程打包成一个war包,然后部署在Linux服务器的Tomcat中就可以了。 拆分成微服务后,修改一个需求,可能会涉及多个微服务,这

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包