跳到主要内容

Eureka(3)-- Eureka Client 注册源码分析(Eureka Client部分)

1.Eureka Client客户端

1.1 Application上配置@EnableDiscoveryClient,引入了EnableDiscoveryClientImportSelector

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
//引入EnableDiscoveryClientImportSelector
@Import(EnableDiscoveryClientImportSelector.class)
public @interface EnableDiscoveryClient {



}

1.2EnableDiscoveryClientImportSelector继承了SpringFactoryImportSelector,并指定泛型EnableDiscoveryClient,SpringFactoryImportSelector的selectImports方法中返回了org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration

所有实现ImportSelector的类,都会在启动时被ConfigurationClassParser中的processImports进行实例化,并执行selectImports方法

SpringFactoryImportSelector是spring-cloud-commons-1.1.0.RELEASE-sources.jar包中的一个抽象类,
主要作用是检查泛型T是否有指定的factory实现, 即spring.factories中有对应类的配置.
spring-cloud-netflix-eureka-client-1.1.0.RELEASE-sources.jar包的/META-INF/spring.factories中有配置

同样的方式可以看到EnableAutoConfiguration会用到EurekaClientAutoConfiguration

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration

org.springframework.cloud.client.discovery.EnableDiscoveryClient=\
org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration