Spring Cloud Eureka源码解析:第二章中注册中心启动类EnableEurekaServ注解有何作用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1127个文字,预计阅读时间需要5分钟。
欢迎访问我的GitHub章节《Spring Cloud 源码分析》系列文章的第二篇。我们从注册中心Eureka开始这段历程;Spring Cloud 源码下载,今天的源码分析主要围绕spring-cloud-netflix这个项目。
欢迎访问我的 GitHub
- 本章是《Spring Cloud 源码分析》系列文章的第二篇,我们从注册中心 Eureka 开始这段历程;
Spring Cloud 源码下载
- 今天的源码分析主要是 spring-cloud-netflix 这个工程的源码,版本为 1.4.0.RELEASE。
启动类上的注解
- 第一篇 Spring Cloud源码分析之Eureka篇第一章:准备工作 中,创建的注册中心应用 springclouddeepeureka 的启动类 SpringclouddeepeurekaApplication.java 的源码如下:
-
上面这段代码与一般的 SpringBoot 启动类不同之处在于多了个注解 @EnableEurekaServer ,今天的源码分析都是围绕这个类开展的;
- 看看此注解的源码:
-
上述代码中,注解 @Import(EurekaServerMarkerConfiguration.class) 表示,EurekaServerMarkerConfiguration 这个类也会被作为 bean 做实例化;另外请注意注释中的内容: 注解 EnableEurekaServer 用来激活 Eureka Server 相关的配置:EurekaServerAutoConfiguration ,记下这是 EurekaServerAutoConfiguration 第一次出现在我们面前;
- 接下来去看被实例化了的 EurekaServerMarkerConfiguration 的源码:
-
如上所示,简单到只有个一内部类 EurekaServerMarkerConfiguration.Marker,我的猜测是: 有的 bean 会通过注解 ConditionalOnBean 作为自己是否实例化的条件,而条件对应的 bean 就是 EurekaServerMarkerConfiguration.Marker ;
-
请注意注释中的内容: 注解 EurekaServerMarkerConfiguration 用来响应激活 EurekaServerAutoConfiguration ,这是 EurekaServerAutoConfiguration 第二次出现在我们面前;
- 根据前面两次注释的提示,EurekaServerAutoConfiguration 类是必须要看了,打开这个类,先看注解:
-
符合之前的猜测,通过 @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) 注解,保证了 EurekaServerAutoConfiguration 类会被实例化后注册到 spring 容器中,也就是说这里面的配置都生效了;
-
接下来就是 spring 容器对 bean 进行实例化和初始化了,重点需要关注的是 EurekaServerInitializerConfiguration、EurekaServerContext、EurekaServerBootstrap 这三个类;
- EurekaServerAutoConfiguration 中的 @Bean 注解会实例化 EurekaServerContext、EurekaServerBootstrap,这两个实例已经不是 SpringCloud 工程的内容了,它们都来自 com.netflix.eureka ,它们接手了真正的 EurekaServer 的启动逻辑:
- EurekaServerInitializerConfiguration 这个类出现在 EurekaServerAutoConfiguration 的注解中,通过 @Import 注解被实例化,由于实现了 Lifecycle 接口,因此会被 spring 容器回调 start 方法:
-
如上所示,EurekaServerInitializerConfiguration 初始化的时候,除了主动调用 bootstrap 的初始化方法,还通过广播将 eureka 的配置信息发出去;
- eureka 的配置信息 EurekaServerConfig 来自何处呢?EurekaServerAutoConfiguration 的内部类 EurekaServerConfigBeanConfiguration 负责生成这些配置信息,实例类型为 EurekaServerConfigBean:
- 至此,我们对 EnableEurekaServer 注解有了更深入的了解,虽然创建注册中心所需代码很少,但是背后隐藏着复杂的初始化服务,感谢大师们杰出的设计,封装了复杂逻辑,让业务测可以轻量级完成这些操作;
本文共计1127个文字,预计阅读时间需要5分钟。
欢迎访问我的GitHub章节《Spring Cloud 源码分析》系列文章的第二篇。我们从注册中心Eureka开始这段历程;Spring Cloud 源码下载,今天的源码分析主要围绕spring-cloud-netflix这个项目。
欢迎访问我的 GitHub
- 本章是《Spring Cloud 源码分析》系列文章的第二篇,我们从注册中心 Eureka 开始这段历程;
Spring Cloud 源码下载
- 今天的源码分析主要是 spring-cloud-netflix 这个工程的源码,版本为 1.4.0.RELEASE。
启动类上的注解
- 第一篇 Spring Cloud源码分析之Eureka篇第一章:准备工作 中,创建的注册中心应用 springclouddeepeureka 的启动类 SpringclouddeepeurekaApplication.java 的源码如下:
-
上面这段代码与一般的 SpringBoot 启动类不同之处在于多了个注解 @EnableEurekaServer ,今天的源码分析都是围绕这个类开展的;
- 看看此注解的源码:
-
上述代码中,注解 @Import(EurekaServerMarkerConfiguration.class) 表示,EurekaServerMarkerConfiguration 这个类也会被作为 bean 做实例化;另外请注意注释中的内容: 注解 EnableEurekaServer 用来激活 Eureka Server 相关的配置:EurekaServerAutoConfiguration ,记下这是 EurekaServerAutoConfiguration 第一次出现在我们面前;
- 接下来去看被实例化了的 EurekaServerMarkerConfiguration 的源码:
-
如上所示,简单到只有个一内部类 EurekaServerMarkerConfiguration.Marker,我的猜测是: 有的 bean 会通过注解 ConditionalOnBean 作为自己是否实例化的条件,而条件对应的 bean 就是 EurekaServerMarkerConfiguration.Marker ;
-
请注意注释中的内容: 注解 EurekaServerMarkerConfiguration 用来响应激活 EurekaServerAutoConfiguration ,这是 EurekaServerAutoConfiguration 第二次出现在我们面前;
- 根据前面两次注释的提示,EurekaServerAutoConfiguration 类是必须要看了,打开这个类,先看注解:
-
符合之前的猜测,通过 @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) 注解,保证了 EurekaServerAutoConfiguration 类会被实例化后注册到 spring 容器中,也就是说这里面的配置都生效了;
-
接下来就是 spring 容器对 bean 进行实例化和初始化了,重点需要关注的是 EurekaServerInitializerConfiguration、EurekaServerContext、EurekaServerBootstrap 这三个类;
- EurekaServerAutoConfiguration 中的 @Bean 注解会实例化 EurekaServerContext、EurekaServerBootstrap,这两个实例已经不是 SpringCloud 工程的内容了,它们都来自 com.netflix.eureka ,它们接手了真正的 EurekaServer 的启动逻辑:
- EurekaServerInitializerConfiguration 这个类出现在 EurekaServerAutoConfiguration 的注解中,通过 @Import 注解被实例化,由于实现了 Lifecycle 接口,因此会被 spring 容器回调 start 方法:
-
如上所示,EurekaServerInitializerConfiguration 初始化的时候,除了主动调用 bootstrap 的初始化方法,还通过广播将 eureka 的配置信息发出去;
- eureka 的配置信息 EurekaServerConfig 来自何处呢?EurekaServerAutoConfiguration 的内部类 EurekaServerConfigBeanConfiguration 负责生成这些配置信息,实例类型为 EurekaServerConfigBean:
- 至此,我们对 EnableEurekaServer 注解有了更深入的了解,虽然创建注册中心所需代码很少,但是背后隐藏着复杂的初始化服务,感谢大师们杰出的设计,封装了复杂逻辑,让业务测可以轻量级完成这些操作;

