漆黑的夜色能遮住这个人的容貌可是却无法遮住他那黑宝石般的眼睛,圆润无暇,时不时透露出一丝晶莹之光。

对于其他的事情她根本不怎么在意也没兴趣在意,反而是在看到这一幕之后还不着痕迹的帮着娜洁希坦。

最赚钱的暴利生意互联网网上赚钱

东宫之争就仿佛一片平静水面下的暗流。尽管杀机重重,但水面上却风平浪静,而李庆安的归来,就像一颗石子投进水中,泛起一阵阵涟漪,可是谁也不知道这阵涟漪是会引发出水波汹涌?还是无声无息地消失。
也是运气不好,李庆安偏偏昨晚不在城外军营,便住在千牛卫的军营内,使崔平没有能及时找到李庆安。

人家断头谷本来就是让人练胆子的,她这一下可好,唉。叶扬心中独自哀叹起来。

default


前言

Spring 作为 Java 世界非官方标准框架,任何一个中间件想要得到良好的发展,必须完美支持 Spring 的各种特性,即:无缝融入 Spring。

Apollo 作为分布式配置中心,服务于 Java 应用程序,Java 应用程序可以通过 Apollo 提供的 Client 获取远程配置信息。而如何将这个 Client 高度融合到用户的应用程序中呢?

这就需要针对 Spring 提供给我们的接口进行扩展。

在之前的文章中,已经大致聊过 Spring 的一些扩展接口:深入理解Spring 之 Spring 进阶开发必知必会 之 Spring 扩展接口。

而想融入 Spring,首先得找到入口,然后才能注册相关的类进行自己系统的初始化。
所以,如何找到并处理入口成了一门学问,我们今天看看 apollo 如何处理的。

第一种入口:XML

XML 是传统 Java 项目的配置文件,特别是 Spring MVC 项目。虽然现在都是使用的自动化配置,但仍然有一些遗留项目使用 XML,因此,支持 XML 是大部分中间件的必须工作。

支持 XML 需要准守 Spring 的几个约定:

  1. 继承 NamespaceHandlerSupport 抽象类,重写 init 方法,调用 registerBeanDefinitionParser 方法,并传入自己继承的 AbstractSingleBeanDefinitionParser 子类用于解析标签,重写他的 getBeanClass 方法,返回一个 Bean,用于注册相关的 Bean。
  2. classpath 下创建 META-INF 目录,创建 spring.handlers 文件,将 xml 配置中的 URL 指向 NamespaceHandlerSupport
  3. META-INF 目录下,创建 apollo-1.0.0.xsd xsd 文件,用于解释自定义标签。
  4. META-INF 目录下,继续创建 spring.schemas 文件,将 xml 配置中的 xsd URL 指向 xsd 文件。

如果你的 xml 配置中,引用了 apollo 的标签,Spring 将会根据 xml 中的 URL 找到 spring.handlers 中的 NamespaceHandlerSupport 类,并对标签进行解析。也会从 getBeanClass 得到一个设置的 bean,在这个 bean 里,做了 apollo 关键类的注册。

第二种入口:@Import 注解

相对于基于XML的配置,基于Java的配置是目前比较流行的方式。

@Import 注解的使用方式:

  1. 定义一个自己的启动注解。并标注 @import 注解, 其实就是 xml 中的 import 标签,在该注解中,可以配置一个类,这个类就会注册进 Spring 的容器,成为 Bean,你就可以在这个 bean 里做文章。
    在 apollo 中,使用方式如下:

    @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented
    @Import(ApolloConfigRegistrar.class)
    public @interface EnableApolloConfig {
      String[] value() default {ConfigConsts.NAMESPACE_APPLICATION};
      int order() default Ordered.LOWEST_PRECEDENCE;
    }
  2. 从上面可以看出 ApolloConfigRegistrar 类是 apollo 注册进的 bean。这个 bean 用于处理 @EnableApolloConfig 注解,同时注册 apollo 关键 Bean 到 Spring 容器中。

  3. 用户只需在 Spring 系统中的某个类上,标注 @EnableApolloConfig ,就可以通过 Spring 的方式(自动更新,注解等)使用 apollo 功能。

第三种入口:SpringBoot Starter

目前最流行的框架就是 Spring Boot ,兼容 SpringBoot 是一个大趋势。

Spring Boot 提供 spring-boot-autoconfigure 让第三方框架兼容 Boot,称之为 starter。

创建一个 starter 需要遵守几个约定:

  1. maven 引入 spring-boot-autoconfigure artifact.
  2. 创建一个类,实现ApplicationContextInitializer 接口,重写 initialize 方法,该方法在容器初始化的时候调用。
  3. META-INF 创建 spring.factories 文件,Boot 启动时会自动扫描这个文件。需要在这个文件中写入一个步骤 2 创建的类,类似 org.springframework.context.ApplicationContextInitializer=com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer。这个类的作用是提前(容器初始化前)加载关键配置到 Spring 环境。
  4. spring.factories 文件中,还需要让 boot 的 EnableAutoConfiguration 自动配置类指向一个自定义类。这是 SpringBoot starter 的关键,例如:org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ctrip.framework.apollo.spring.boot.ApolloAutoConfiguration。ApolloAutoConfiguration 就会加入的 apollo 的配置 bean 中。你可以在这个配置 bean 中,创建一个关键 bean ,用于处理系统相关的初始化类。例如 apollo 的方式:

    @Configuration
    @ConditionalOnProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED)
    @ConditionalOnMissingBean(PropertySourcesProcessor.class)// 当Spring Context中不存在该Bean时
    public class ApolloAutoConfiguration {
      @Bean
      public ConfigPropertySourcesProcessor configPropertySourcesProcessor() {
    return new ConfigPropertySourcesProcessor();
      }
    }

    在 apollo 中,ConfigPropertySourcesProcessor 就是用来注册系统关键 bean 的。

总结

本文重点介绍了 3 种入口:

  1. XML 方式,通过在 getBeanClass 方法返回系统关键 Bean。
  2. @Import 注解,通过在注解中定义 Bean,然后在该 Bean 中处理。
  3. SpringBoot Starter 方式,通过 spring.factories 文件中定义自动配置类,可以注册系统关键 bean。

在以后的开发中,如果想融入 Spring,就可以通过这 3 种方式自行处理。

当前文章:http://hnhdqp.com/news/2018101330749/index.html

发布时间:2018-12-16 08:06:48

楚留香可以赚RMB吗? 手机打字兼职赚钱日结 2018能赚钱的游戏 一元能提现的赚钱软件 刷单能赚到钱吗 小本生意什么好 订购生意参谋多少钱 百度问答能赚钱吗

编辑:马董顺

相关新闻

单板滑雪U型场地世界杯中国站:中国选手摘金夺铜

2018-12-16 04:04:04

河源孕炕科技股份有限公司

子洲县秧歌彩排迎新春

2018-12-16 06:53:03

德清傅肇工程有限公司

榆阳区扶贫办举行扶贫工作培训会

2018-12-16 00:59:17

日照毁斡商贸有限公司

亚洲超级豪宅排出十大座次

2018-12-16 10:02:11

黔南唾送笛集团公司

热门推荐

  • 诺基亚6第二代登陆印度:独有3+32GB,售价约1650元
  • 美国马里兰州一高中发生枪击案 枪手死亡两学生受伤
  • 想做“翻译官”的机械手:掌握手语手指可逐个拼写字母
  • 中国区《守望先锋挑战者系列赛》周五17时开幕
  • 《绝地求生》国服屡次违规将封机器 玩家:网吧老板会打死开挂孤儿
  • 特斯拉:弗里蒙特工厂将成为“全球最安全的汽车制造工厂”
  • 69999积分!支付宝全球排名第二用户薅走iPhone X
  • 《绝地求生》惊现海贼王外挂:手臂自由伸缩如同路飞
  • 记录下Webapi签名机制
  • 印控克什米尔地域一军事基地遇袭 7名士兵殒命
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:微信公众号注册多少钱 小生意做什么好本钱小
  • 游戏赚钱网 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 没钱吃饭 流量挂机赚钱软件 现今零元的热门的赚钱买卖 可以赚佣金的网站