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