Springboot两要素

为什么需要有Springboot,我们知道一些脚本语言框架在web应用开发方面非常方便,比如常见的ROR,Node,php等,而使用tomcat开发一个简单的hello world的页面服务器就需要做很多配置,尽管可以使用之前的SSH web三剑客,但也仍然比较麻烦。Springboot通过开箱即用的组件化的方式简化了这一切,让javaer也可以享受到脚本语言一样的快速高效。

Springboot如何实现开箱即用的。我们知道Springboot是基于Spring框架,要实现开箱即用,有两点比较重要,第一,可以自动将组件加载到Spring容器中;第二,提供一种默认配置,同时也可以进行自定义。这样在引入一个组件之后,系统自动加载代码与默认配置,无需任何其他操作就可以直接使用,如何有特殊需求,可以修改配置来进行自定义。

首先第一点,自动加载Bean主要是利用SpringFactoriesLoader,类似Java SPI机制,我们在很多其他地方也常常见到,比如Logger,java中的logging会根据引入的jar包中的logfactory文件来查找目前使用的logger框架,同样,Springboot也会查找当前路径下jar中各个starter中的spring.factories文件,找到每个组件的扩展信息,例如ApplicationContextInitializer,ApplicationListener,EnableAutoConfiguration等,其中EnableAutoConfiguration非常重要,Springboot会将所有的查找到的EnableAutoConfiguration加载到容器中,这样可以完成组件的初始化,Bean加载等操作了。其次每个组件会设置一套需要的配置数据元数据,并且一般都会有一套默认数据,而且用户还可以在application.properties中进行自定义,最小化简化用户配置。

例如如果要为一个RPC框架提供一个Springboot的组件,可以直接引入starter就可以使用,应该如何实现呢。

我们可以为RPC的服务端与消费端分别定义一个注解:@Provider 与@Consumer,  每个注解里面会有一些服务需要的参数,例如版本号,超时时间等,然后新增一个RPCEnableAutoConfiguration,让RPCEnableAutoConfiguration中首先初始化RPC需要的一些信息,例如与地址注册服务器的链接等,然后扫描容器中的所有带有@Provider 与@Consumer中的Bean或者字段信息,然后根据每个注解中的信息生成RPC需要的Bean并注册到容器,这样就实现了一个RPC开箱即用的组件了。要达到的效果大致如下:



参考文献:

https://www.cnblogs.com/zheting/p/6707035.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章