首页 > 社交 > 科普中国

Eureka源码3

常驻编辑 科普中国 2022-10-14 注解   增量   初始化   注册表   源码   实例   入口   状态   代码   时间   方法   信息
hni拜客生活常识网

  • @ConditionalOnMissingRefreshScope

@Target({ ElementType.TYPE, ElementType.METHOD })hni拜客生活常识网

@Retention(RetentionPolicy.RUNTIME)hni拜客生活常识网

@Documentedhni拜客生活常识网

@Conditional(OnMissingRefreshScopeCondition.class)hni拜客生活常识网

@interface ConditionalOnMissingRefreshScope {hni拜客生活常识网

}hni拜客生活常识网

private static class OnMissingRefreshScopeCondition extends AnyNestedCondition {hni拜客生活常识网

OnMissingRefreshScopeCondition() {hni拜客生活常识网

super(ConfigurationPhase.REGISTER_BEAN);hni拜客生活常识网

}hni拜客生活常识网

@ConditionalOnMissingClass("org.springframework.cloud.context.scope.refresh.RefreshScope")hni拜客生活常识网

static class MissingClass {hni拜客生活常识网

}hni拜客生活常识网

@ConditionalOnMissingBean(RefreshAutoConfiguration.class)hni拜客生活常识网

static class MissingScope {hni拜客生活常识网

}hni拜客生活常识网

@ConditionalOnProperty(value = "eureka.client.refresh.enable", havingValue = "false")hni拜客生活常识网

static class OnPropertyDisabled {hni拜客生活常识网

}hni拜客生活常识网

}hni拜客生活常识网


hni拜客生活常识网

大家 可以看看 AnyNestedCondition这个注解,意思就是 只要满足任意一个条件就符合。通过分析,我们知道这三个条件都是满足的,所以这个注解不生效,这个类不生效。hni拜客生活常识网

  • @ConditionalOnRefreshScope

@Target({ ElementType.TYPE, ElementType.METHOD })hni拜客生活常识网

@Retention(RetentionPolicy.RUNTIME)hni拜客生活常识网

@Documentedhni拜客生活常识网

@ConditionalOnClass(RefreshScope.class)hni拜客生活常识网

@ConditionalOnBean(RefreshAutoConfiguration.class)hni拜客生活常识网

@ConditionalOnProperty(value = "eureka.client.refresh.enable", havingValue = "true", matchIfMissing = true)hni拜客生活常识网

@interface ConditionalOnRefreshScope {hni拜客生活常识网

}hni拜客生活常识网


hni拜客生活常识网


hni拜客生活常识网

通过这个注解EurekaClientAutoConfiguration上的注解@AutoConfigureAfter,我们知道当前类注入是在RefreshAutoConfiguration之后注入到容器中。而RefreshScope就是在RefreshAutoConfiguration之后中注入的。所以我们需要分析这个类就可以了。hni拜客生活常识网

@AutoConfigureAfter(name = { "org.springframework.cloud.netflix.eureka.config.DiscoveryClientOptionalArgsConfiguration",hni拜客生活常识网

"org.springframework.cloud.autoconfigure.RefreshAutoConfiguration",hni拜客生活常识网

"org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration",hni拜客生活常识网

"org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration" })hni拜客生活常识网

public class EurekaClientAutoConfiguration {hni拜客生活常识网

}hni拜客生活常识网

2.2.1 ApplicationInfoManager

@Bean
@ConditionalOnMissingBean(value = ApplicationInfoManager.class, search = SearchStrategy.CURRENT)
public ApplicationInfoManager eurekaApplicationInfoManager(
		EurekaInstanceConfig config) {
	InstanceInfo instanceInfo = new InstanceInfoFactory().create(config);
	return new ApplicationInfoManager(config, instanceInfo);
}

创建ApplicationInfoManager 对象,这个对象主要就是管着当前实例信息,也就是instanceInfo , 可以看到,在这个方法中先是创建的instanceInfo,然后将instanceInfo 作为构造参数传入了ApplicationInfoManager 中。hni拜客生活常识网

这个实例信息instanceInfo 里面维护了你当前实例的ip ,端口,appName等信息,注册的时候就是拿这些信息到Eureka Server 上注册。hni拜客生活常识网

2.2.2 EurekaClient

@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config) {
	return new CloudEurekaClient(manager, config, this.optionalArgs,
			this.context);
}

创建Eureka Client 对象,这个CloudEurekaClient 类是Spring Cloud 搞得,然后继承Eureka 原生的DiscoveryClient 类。hni拜客生活常识网

public class CloudEurekaClient extends DiscoveryClient 

我们可以看看它的构造hni拜客生活常识网

hni拜客生活常识网

最重要的是,它调用了父类的DiscoveryClient 的构造,下面重点介绍。hni拜客生活常识网

2.3 小结

总结以上的信息,从EurekaClientAutoConfiguration等方面可罗列出如下几个比较重要的类,如下:

相关阅读:

  • 分支信息注释
  • Spring
  • 抄书第十六天,今天你微笑了吗
  • 一波带走,SpringBoot
  • 最真实的注解,值得永久收藏
  • 自定义的配置文件,如何注入到SpringBoot?
  • 道德经第四十六章原文及注解 第十四章道德经解释 道德
  • SpringCloudAlibaba
  • Mybatis框架使用(一)
  • 八月的最后一个星期天,我“奢侈”了
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。