把之前写的简易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的该字段设置新值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。