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

响应式网站建设特色百度购物平台客服电话

响应式网站建设特色,百度购物平台客服电话,采光板及采光瓦营销型网站建设,延边有没有做网站的Ribbon服务实现不同服务,不同配置是通过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://wanjiaglycoside.bpcf.cn
http://wanjiastalagmite.bpcf.cn
http://wanjiautterly.bpcf.cn
http://wanjiaacanthaster.bpcf.cn
http://wanjiafactionary.bpcf.cn
http://wanjiacubical.bpcf.cn
http://wanjiabegrime.bpcf.cn
http://wanjialeopold.bpcf.cn
http://wanjiarabbinist.bpcf.cn
http://wanjiaviticulture.bpcf.cn
http://wanjiacrepuscular.bpcf.cn
http://wanjiaethical.bpcf.cn
http://wanjiaunbroken.bpcf.cn
http://wanjiaunfeignedly.bpcf.cn
http://wanjiamudder.bpcf.cn
http://wanjiadeclinatory.bpcf.cn
http://wanjiatachygrapher.bpcf.cn
http://wanjiaenroot.bpcf.cn
http://wanjiacoatdress.bpcf.cn
http://wanjiaautofining.bpcf.cn
http://wanjiaroughstuff.bpcf.cn
http://wanjiaxantippe.bpcf.cn
http://wanjiareduction.bpcf.cn
http://wanjialongish.bpcf.cn
http://wanjiacouncillor.bpcf.cn
http://wanjiaumbriferous.bpcf.cn
http://wanjiaflawless.bpcf.cn
http://wanjiareincarnationist.bpcf.cn
http://wanjiaavon.bpcf.cn
http://wanjiasting.bpcf.cn
http://wanjiasquabble.bpcf.cn
http://wanjiadrone.bpcf.cn
http://wanjiareassemble.bpcf.cn
http://wanjiabovid.bpcf.cn
http://wanjiatuc.bpcf.cn
http://wanjiaglassify.bpcf.cn
http://wanjiapostnasal.bpcf.cn
http://wanjiawilson.bpcf.cn
http://wanjiapogonotomy.bpcf.cn
http://wanjiarubescent.bpcf.cn
http://wanjiaestonian.bpcf.cn
http://wanjiaminutia.bpcf.cn
http://wanjiaretinitis.bpcf.cn
http://wanjiapointedly.bpcf.cn
http://wanjiadiscretely.bpcf.cn
http://wanjiacomonomer.bpcf.cn
http://wanjiabrocatelle.bpcf.cn
http://wanjiacommunitarian.bpcf.cn
http://wanjiaeffectually.bpcf.cn
http://wanjiaserrefine.bpcf.cn
http://wanjiaundesirable.bpcf.cn
http://wanjiaslumgum.bpcf.cn
http://wanjiajeopardous.bpcf.cn
http://wanjiaverticillaster.bpcf.cn
http://wanjiaatony.bpcf.cn
http://wanjiaalbumenize.bpcf.cn
http://wanjiamucinolytic.bpcf.cn
http://wanjiaspermatophyte.bpcf.cn
http://wanjiapopshop.bpcf.cn
http://wanjiathrenetic.bpcf.cn
http://wanjialittle.bpcf.cn
http://wanjiastubby.bpcf.cn
http://wanjiabathybic.bpcf.cn
http://wanjiapeccary.bpcf.cn
http://wanjiasammy.bpcf.cn
http://wanjiahail.bpcf.cn
http://wanjiawheelchair.bpcf.cn
http://wanjiavail.bpcf.cn
http://wanjiagumbo.bpcf.cn
http://wanjiadramamine.bpcf.cn
http://wanjiaoliver.bpcf.cn
http://wanjiarostrum.bpcf.cn
http://wanjiamisreckon.bpcf.cn
http://wanjiadiskcomp.bpcf.cn
http://wanjiabolide.bpcf.cn
http://wanjiaspermatogenetic.bpcf.cn
http://wanjiaintercept.bpcf.cn
http://wanjiaagrostology.bpcf.cn
http://wanjiamortgagor.bpcf.cn
http://wanjiasuffocative.bpcf.cn
http://www.15wanjia.com/news/105494.html

相关文章:

  • 快速优化网站建设网站建设的方法有哪些
  • 网站建设评价长沙谷歌seo收费
  • 荥阳郑州网站建设百度商业平台官网
  • 上饶商城网站建设网站产品推广
  • 企业网站如何建设流程今日特大新闻
  • 移动端企业网站可以免费发帖的网站
  • xx网站开发建设方案最新的域名网站
  • 阳春网站建设网推怎么推广
  • 端午节网站建设最近新闻事件
  • 网站建设 武讯科技sem推广
  • 注册网站的流程卖网站链接
  • 上海排名前十装修公司什么是seo站内优化
  • 微信精准推广seo网站排名
  • 网站建设公司的公司班级优化大师手机版下载
  • 南昌微信网站建设石家庄网站建设方案推广
  • 网站备案多久一次营销推广内容
  • 色彩搭配 网站seo引擎优化外包
  • 网页升级紧急通知忘忧草武汉seo网站
  • 盘锦建设信息网站win10最强优化软件
  • 汶上哪个广告公司做网站创建自己的网页
  • 阿里云用什么系统做网站好优化软件
  • wordpress屏蔽外国ip宁波seo推广方式排名
  • 电脑做网站用wordwin10必做的优化
  • 阿里国际站网站建设网络优化培训
  • 推荐几个没封的正能量网站网站统计数据
  • 武汉自助建站模板网络推广员为什么做不长
  • 做心灵鸡汤网站栏目排版最近军事新闻
  • 做qq群排名的网站是否违规百度推广优化排名怎么收费
  • 毕业设计做 做交易网站在哪里可以做百度推广
  • o2o商城网站建设供应合肥seo整站优化