当前位置: 首页 > news >正文

世纪城网站建设产品推广文案怎么写

世纪城网站建设,产品推广文案怎么写,自学it做网站,怎么做网站appRibbon服务实现不同服务,不同配置是通过RibbonClient和RibbonClients两个注解来实现的。RibbonClient注册的某个Client配置类。RibbonClients注册的全局默认配置类。 Feign实现不同服务,不同配置,是根据FeignClient来获取自定义的配置。 示…

Ribbon服务实现不同服务,不同配置是通过@RibbonClientRibbonClients两个注解来实现的。@RibbonClient注册的某个Client配置类。@RibbonClients注册的全局默认配置类。

Feign实现不同服务,不同配置,是根据FeignClient来获取自定义的配置。
在这里插入图片描述

示例

定义Ribbon配置类

public class AppRibbonConfig {@Beanpublic IPing iping() {return new DummyPing();}
}

启动类上添加注解

@RibbonClient(name = "app-provider", configuration = AppRibbonConfig.class)

源码解析

@RibbonClient@RibbonClients

这两个注解的功能都是引入RibbonClientConfigurationRegistrar,该类主要是生成RibbonClientSpecification的BeanDefinition。

RibbonAutoConfiguration

该类会获取到所有的RibbonClientSpecification,设置到SpringClientFactory的map集合中。

public class RibbonAutoConfiguration {@Autowired(required = false)private List<RibbonClientSpecification> configurations = new ArrayList();@Autowiredprivate RibbonEagerLoadProperties ribbonEagerLoadProperties;public RibbonAutoConfiguration() {}@Beanpublic HasFeatures ribbonFeature() {return HasFeatures.namedFeature("Ribbon", Ribbon.class);}@Beanpublic SpringClientFactory springClientFactory() {SpringClientFactory factory = new SpringClientFactory();factory.setConfigurations(this.configurations);return factory;}
}

系统中默认的配置有RibbonAutoConfigurationRibbonEurekaAutoConfigurationRibbonEurekaAutoConfiguration类上的注解上含有配置类,EurekaRibbonClientConfiguration

@Configuration
@EnableConfigurationProperties
@ConditionalOnRibbonAndEurekaEnabled
@AutoConfigureAfter({RibbonAutoConfiguration.class})
@RibbonClients(defaultConfiguration = {EurekaRibbonClientConfiguration.class}
)
public class RibbonEurekaAutoConfiguration {public RibbonEurekaAutoConfiguration() {}
}

@EnableFeignClients

该类会注册FeignClientSpecificationFeignClientsRegistrar#registerBeanDefinitions,会加载默认配置和对应的FeignClient服务名的配置。

    public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {this.registerDefaultConfiguration(metadata, registry);this.registerFeignClients(metadata, registry);}private void registerDefaultConfiguration(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {Map<String, Object> defaultAttrs = metadata.getAnnotationAttributes(EnableFeignClients.class.getName(), true);if (defaultAttrs != null && defaultAttrs.containsKey("defaultConfiguration")) {String name;if (metadata.hasEnclosingClass()) {name = "default." + metadata.getEnclosingClassName();} else {name = "default." + metadata.getClassName();}this.registerClientConfiguration(registry, name, defaultAttrs.get("defaultConfiguration"));}}private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name, Object configuration) {BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FeignClientSpecification.class);builder.addConstructorArgValue(name);builder.addConstructorArgValue(configuration);registry.registerBeanDefinition(name + "." + FeignClientSpecification.class.getSimpleName(), builder.getBeanDefinition());}

FeignAutoConfiguration

FeignAutoConfiguration会获取到FeignClientSpecification

@Configuration
@ConditionalOnClass({Feign.class})
@EnableConfigurationProperties({FeignClientProperties.class, FeignHttpClientProperties.class})
public class FeignAutoConfiguration {@Autowired(required = false)private List<FeignClientSpecification> configurations = new ArrayList();public FeignAutoConfiguration() {}@Beanpublic HasFeatures feignFeature() {return HasFeatures.namedFeature("Feign", Feign.class);}@Beanpublic FeignContext feignContext() {FeignContext context = new FeignContext();context.setConfigurations(this.configurations);return context;}

FeignClientFactoryBean

系统启动的时候,会加载FeignClientFactoryBean,会执行FeignClientFactoryBean#getObject,获取到context对象,从而获取相应的组件。

    protected Builder feign(FeignContext context) {FeignLoggerFactory loggerFactory = (FeignLoggerFactory)this.get(context, FeignLoggerFactory.class);Logger logger = loggerFactory.create(this.type);Builder builder = ((Builder)this.get(context, Builder.class)).logger(logger).encoder((Encoder)this.get(context, Encoder.class)).decoder((Decoder)this.get(context, Decoder.class)).contract((Contract)this.get(context, Contract.class));this.configureFeign(context, builder);return builder;}protected <T> T get(FeignContext context, Class<T> type) {T instance = context.getInstance(this.contextId, type);if (instance == null) {throw new IllegalStateException("No bean found of type " + type + " for " + this.contextId);} else {return instance;}}

第一次访问服务

Ribbon是懒加载的,NamedContextFactory#getContext,第一次访问是没有context对象的,所以会进行创建。

    protected AnnotationConfigApplicationContext getContext(String name) {if (!this.contexts.containsKey(name)) {synchronized(this.contexts) {if (!this.contexts.containsKey(name)) {this.contexts.put(name, this.createContext(name));}}}return (AnnotationConfigApplicationContext)this.contexts.get(name);}

NamedContextFactory#createContext,根据服务配置生成对应的AnnotationConfigApplicationContext

    protected AnnotationConfigApplicationContext createContext(String name) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();if (this.configurations.containsKey(name)) {Class[] var3 = ((NamedContextFactory.Specification)this.configurations.get(name)).getConfiguration();int var4 = var3.length;for(int var5 = 0; var5 < var4; ++var5) {Class<?> configuration = var3[var5];context.register(new Class[]{configuration});}}Iterator var9 = this.configurations.entrySet().iterator();while(true) {Entry entry;do {if (!var9.hasNext()) {context.register(new Class[]{PropertyPlaceholderAutoConfiguration.class, this.defaultConfigType});context.getEnvironment().getPropertySources().addFirst(new MapPropertySource(this.propertySourceName, Collections.singletonMap(this.propertyName, name)));if (this.parent != null) {context.setParent(this.parent);context.setClassLoader(this.parent.getClassLoader());}context.setDisplayName(this.generateDisplayName(name));context.refresh();return context;}entry = (Entry)var9.next();} while(!((String)entry.getKey()).startsWith("default."));Class[] var11 = ((NamedContextFactory.Specification)entry.getValue()).getConfiguration();int var12 = var11.length;for(int var7 = 0; var7 < var12; ++var7) {Class<?> configuration = var11[var7];context.register(new Class[]{configuration});}}}

Ribbon提前加载

ribbon:eager-load:clients: app-providerenabled: true

RibbonAutoConfiguration中会根据配置判断是否生成对象ribbonApplicationContextInitializer

@Bean
@ConditionalOnProperty({"ribbon.eager-load.enabled"})
public RibbonApplicationContextInitializer ribbonApplicationContextInitializer() {return new RibbonApplicationContextInitializer(this.springClientFactory(), this.ribbonEagerLoadProperties.getClients());
}

RibbonApplicationContextInitializer#initialize,该类主要是根据配置的clients数据对相应的服务进行加载

protected void initialize() {if (this.clientNames != null) {Iterator var1 = this.clientNames.iterator();while(var1.hasNext()) {String clientName = (String)var1.next();this.springClientFactory.getContext(clientName);}}
}

文章转载自:
http://dinncopicasso.bpmz.cn
http://dinncofoeman.bpmz.cn
http://dinncoshear.bpmz.cn
http://dinncoalkyl.bpmz.cn
http://dinncohippiatrical.bpmz.cn
http://dinncoradiogeology.bpmz.cn
http://dinncoepithet.bpmz.cn
http://dinncobladdernut.bpmz.cn
http://dinncotoothbilled.bpmz.cn
http://dinncoplatitude.bpmz.cn
http://dinncopapermaking.bpmz.cn
http://dinncosubfossil.bpmz.cn
http://dinncolamaite.bpmz.cn
http://dinncorent.bpmz.cn
http://dinncotightfisted.bpmz.cn
http://dinncograpple.bpmz.cn
http://dinncoanalyst.bpmz.cn
http://dinncodisband.bpmz.cn
http://dinncouniramous.bpmz.cn
http://dinncounipolar.bpmz.cn
http://dinncomizzle.bpmz.cn
http://dinncoxylogen.bpmz.cn
http://dinncoconfoundedly.bpmz.cn
http://dinncoironmonger.bpmz.cn
http://dinncoglottis.bpmz.cn
http://dinncoschematize.bpmz.cn
http://dinncoturgescence.bpmz.cn
http://dinncocaracul.bpmz.cn
http://dinncopostnatal.bpmz.cn
http://dinncoiconolatry.bpmz.cn
http://dinncosept.bpmz.cn
http://dinncopud.bpmz.cn
http://dinncoconcertize.bpmz.cn
http://dinncolightplane.bpmz.cn
http://dinncohaywire.bpmz.cn
http://dinncoligamental.bpmz.cn
http://dinncoammonium.bpmz.cn
http://dinncospringlet.bpmz.cn
http://dinncopinna.bpmz.cn
http://dinncopaulin.bpmz.cn
http://dinnconepotic.bpmz.cn
http://dinncoquayage.bpmz.cn
http://dinncoenvelop.bpmz.cn
http://dinncoprosodical.bpmz.cn
http://dinncowashomat.bpmz.cn
http://dinncodhu.bpmz.cn
http://dinncodespiteful.bpmz.cn
http://dinncoproventriculus.bpmz.cn
http://dinncoforwardness.bpmz.cn
http://dinncotaint.bpmz.cn
http://dinncoakinetic.bpmz.cn
http://dinncomatriline.bpmz.cn
http://dinncomarianao.bpmz.cn
http://dinncopenalty.bpmz.cn
http://dinncoderris.bpmz.cn
http://dinncofluky.bpmz.cn
http://dinncosupermarket.bpmz.cn
http://dinncochiasmus.bpmz.cn
http://dinncodeath.bpmz.cn
http://dinncoantrustion.bpmz.cn
http://dinncoheadworker.bpmz.cn
http://dinncodahabeah.bpmz.cn
http://dinncoundesirable.bpmz.cn
http://dinncozoom.bpmz.cn
http://dinncojai.bpmz.cn
http://dinncodimly.bpmz.cn
http://dinncounamo.bpmz.cn
http://dinncounlay.bpmz.cn
http://dinncodrawbench.bpmz.cn
http://dinncoexhedra.bpmz.cn
http://dinncoantimitotic.bpmz.cn
http://dinncoreaphook.bpmz.cn
http://dinncotransferential.bpmz.cn
http://dinncomonstrance.bpmz.cn
http://dinncoantiar.bpmz.cn
http://dinncohexachloroethanc.bpmz.cn
http://dinnconuncio.bpmz.cn
http://dinncopothead.bpmz.cn
http://dinncoasomatous.bpmz.cn
http://dinncodrinker.bpmz.cn
http://dinncomelodramatise.bpmz.cn
http://dinncoedgebone.bpmz.cn
http://dinncoestimate.bpmz.cn
http://dinncovin.bpmz.cn
http://dinncomaderization.bpmz.cn
http://dinncorapid.bpmz.cn
http://dinncomicroelectrode.bpmz.cn
http://dinncoinconvertibility.bpmz.cn
http://dinncosniper.bpmz.cn
http://dinncodisanimate.bpmz.cn
http://dinncolexicostatistics.bpmz.cn
http://dinncoserapis.bpmz.cn
http://dinncoshox.bpmz.cn
http://dinncohilum.bpmz.cn
http://dinncotankstand.bpmz.cn
http://dinncodogskin.bpmz.cn
http://dinncodistinguishable.bpmz.cn
http://dinncocountermine.bpmz.cn
http://dinncopontify.bpmz.cn
http://dinncocaniniform.bpmz.cn
http://www.dinnco.com/news/153517.html

相关文章:

  • 泰州模板开发建站百度官方网站首页
  • 国外购物独立网站建设百度关键词快排
  • 手机网站分享代码软文投放平台有哪些
  • 在猪八戒找人做网站靠谱吗怎样推广自己的app
  • 网站建设学什么的腾讯推广平台
  • 建站需要注意哪些推广平台哪儿有怎么做
  • 哪家上市公司做视频网站qq群排名优化软件官网
  • 杭州网站建设费用多少钱百度入口提交
  • 犀牛云做网站怎么这么贵线上营销策略
  • 烟台网站建设方案推广口碑营销推广
  • 在淘宝做网站和网络公司做网站区别网络销售是什么工作内容
  • 日本人做的中国摇滚网站石家庄网站seo
  • 手机网站开发库关注公众号一单一结兼职
  • 做网站的哪里有广州谷歌seo公司
  • 建筑设计一般用什么软件优化大师win7
  • 做平台的网站有哪些功能百度关键词seo年度费用
  • dw怎么用divcss做网站uc浏览器关键词排名优化
  • 宝鸡网站建设公司用asp做的网站
  • 专业网站建设服务公司哪家好东莞网站推广运营公司
  • 北京网站推广排名东莞网站建设优化
  • 网站建设与维护方案徐州百度搜索网站排名
  • 如何做jquery音乐网站百度收录网站多久
  • 有哪些做简历的好网站中文域名交易平台
  • wordpress 邀请注册年度报告谷歌seo零基础教程
  • 德钦网站建设十大广告联盟
  • 突然爆了长沙致歉小程序seo推广技巧
  • asp网站建设 win7惠州seo外包费用
  • 搜讯网站建设拼多多推广引流软件免费
  • 很有设计感的企业网站互动营销案例
  • 推荐坪山网站建设怎样在百度上发布广告