【实践】动手封装spring-boot-starter

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

你可能感兴趣的:(【实践】动手封装spring-boot-starter)