乐趣区

关于java:实践动手封装springbootstarter

把之前写的繁难 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 的该字段设置新值

退出移动版