当前位置: 首页 > 后端技术 > Java

【实践】spring-boot-starter的打包动手

时间:2023-04-01 16:43:03 Java

封装之前写的简单RPC框架[1]简述自动组装的原理。springboot的核心注解@SpringBootApplication包含一个名为@EnableAutoConfiguration的注解,它是进行自动装配的关键。在@EnableAutoConfiguration注解中,真正执行自动组装的是AutoConfigurationImportSelector类。该类的getAutoConfigurationEntry方法调用getCandidateConfigurations方法扫描资源目录下的META-INF/spring.factories文件,返回需要加载到IOC容器中的配置类列表。总结:springboot是自动组装的,因为启动类上存在@EnableAutoConfiguration注解,所以启动时会扫描引用的starter的jar包下的META-INF/spring.factories文件,其中声明的自动配置类为加载到IOC容器中。[2]封装spring-boot-starterPOM文件,写这个starter信息在resource/META-INF下新建spring.factories文件,自动配置的全限定类名(包路径+类名)class写在里面,然后可以在当前项目的子模块中引用,或者用maven打包后mvninstall:install-file-Dfile={}-DgroupId={}-DartifactId={}-Dversion={}-Dpackaging={}并传到本地maven仓库,其他项目中可以引用。[3]关于基于RPC注解的服务的自动注册,发现BeanPostProcessor类是IOC容器对外提供的扩展接口。内部方法有两个:bean初始化前处理:postProcessBeforeInitializationbean初始化后处理:postProcessAfterInitialization因为我们的自动定义注解是这样用于服务bean的,所以服务注册需要在bean初始化之前进行自定义服务发现。注解作用于controllerbean的property字段,所以bean初始化后,进行处理,扫描bean的字段存储。注解时,获取字段信息,使用动态代理增强字段的bean,然后field.set(bean,proxyObject)为controllerbean的字段重置新值