把之前写的繁难 RPC 框架封装下
[1] 简述主动拆卸原理
在 springboot 的外围注解 @SpringBootApplication 里蕴含一个名为 @EnableAutoConfiguration 的注解,这是执行主动拆卸的要害
而在 @EnableAutoConfiguration 注解中理论执行主动拆卸 的是 AutoConfigurationImportSelector 类
该类的 getAutoConfigurationEntry 办法调用 getCandidateConfigurations 办法扫描 resource 目录下 META-INF/spring.factories 文件返回须要被加载进 IOC 容器的配置类列表
总结:springboot 主动拆卸是因为在启动类上存在 @EnableAutoConfiguration 注解,所以在启动时会扫描被援用 starter 的 jar 包下 META-INF/spring.factories 文件,把外面申明的主动配置类加载进 IOC 容器中
[2] 封装 spring-boot-starter
POM 文件中写好该 starter 信息
在 resource/META-INF 下新建 spring.factories 文件外面写上主动配置类的全限定类名 (包门路 + 类名)
而后在以后我的项目的子模块中就能够了援用了,或者应用 maven 打包后 mvn install:install-file -Dfile={} -DgroupId={} -DartifactId={} -Dversion={} -Dpackaging={}
转存至本地 maven 仓库就能够在其余我的项目中援用了。
[3] 对于 RPC 基于注解的服务主动注册,发现
BeanPostProcessor 类是 IOC 容器对外提供的扩大接口,外部有两个办法
bean 初始化前的解决:postProcessBeforeInitialization
bean 初始化后的解决:postProcessAfterInitialization
因为咱们的主动定义注解是这样被应用于 service bean 的,所以服务注册是须要在 bean 初始化前执行
自定义服务发现的注解作用于 controller bean 的属性字段上,所以是在 bean 初始化后在对其进行解决
扫描到该 bean 的 field 存在注解时,获取该字段信息,应用动静代理使该字段的 bean 加强,而后 field.set(bean, proxyObject) 从新对 controller bean 的该字段设置新值