1、Eureka Client通过@EnableDiscoveryClient启动
2、查看EnableDiscoveryClient注解,里面引入了EnableDiscoveryClientImportSelector.class类给spring托管
3、查看EnableDiscoveryClientImportSelector类源码。这个类比较简单,看不出下一步流程,但可以看到继承了SpringFactoryImportSelector类。
4、查看SpringFactoryImportSelector类,可以看出实现了spring的自动装配接口DeferredImportSelector并实现了selectImports方法。
5、通过运行可以发现,EnableDiscoveryClientImportSelector启动时执行selectImports是为了得到要引入的工厂factories配置类org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration。
6、通过搜索找到EurekaDiscoveryClientConfiguration类的入口(在spring-cloud-netflix-eureka-client-1.3.0.RELEASE.jar包)
7、EurekaDiscoveryClientConfiguration里面创建了一个空marker的bean
8、到这一步,看似无从分析下去。但我们可以回看第六步的spring.factories文件。挨个看了一遍配置,只有EurekaClientAutoConfiguration类里面初始化了很多bean。
9、先看EurekaClientAutoConfiguration类的头部,可以看到初始化这个类的条件中就有第7步创建的Marker.class,到此可以跟上面的步骤串了起来。
10、在看看EurekaClientAutoConfiguration类的内容,eurekaClientConfigBean方法初始化了application.yml中eureka.client节点的配置(如下图)
11、在看看EurekaClientAutoConfiguration类的内容,eurekaInstanceConfigBean方法初始化了application.yml中eureka.instance节点的配置(如下图)
12、通过查看EurekaClientAutoConfiguration类的内容,其中有两个地方都创建了EurekaClient。通过运行可知,执行的是RefreshableEurekaClientConfiguration类中的CloudEurekaClient类。
13、*我们上网查资料的时候,可以知道eureka核心的类是DiscoveryClient类。
http://blog.didispace.com/springcloud-sourcecode-eureka/
14、查看CloudEurekaClient类,可以看到它实际继承的就是DiscoveryClient类。在CloudEurekaClient构造函数中可看到执行的就是DiscoveryClient类的构造函数。
15、跟踪进去,可看到DiscoveryClient类中的初始化操作。(服务注册、服务获取、服务续约)参考步骤13的链接。