前言
紧接上一篇《理解springboot那些约定俗成的框架类名、全局context等命名规范,就可以读懂一半springboot的源代码》的解析与总结,这一篇,将继续汇总有关springboot那些注册与回调、监控与统计、设计模式相关等命名规范,搞懂此篇,大概可以读懂70%的springboot源代码!
注册与回调
Registrar:
注册并管理一系列资源,用于注册监听动作。
ImportBeanDefinitionRegistrar接口
为Spring应用程序的动态注册Bean提供了强大的机制。
通过实现该接口,我们可以根据各种条件和场景来注册Bean,从而实现更加灵活和可扩展的应用程序上下文管理。
无论是条件化注册、集成第三方库还是处理自定义注解,ImportBeanDefinitionRegistrar都能够帮助我们实现更高级的Spring配置和管理。
ImportBeanDefinitionRegistrar接口只有一个核心方法需要实现,即registerBeanDefinitions方法。该方法接受两个参数:
- AnnotationMetadata metadata:包含有关当前正在处理的注解类的元数据信息,如注解的属性值、类名等。
- BeanDefinitionRegistry registry:允许将新的Bean定义注册到Spring容器中。
以下是registerBeanDefinitions方法的典型签名:
void registerBeanDefinitions(AnnotationMetadata metadata,
BeanDefinitionRegistry registry);
FormatterRegistry:格式化器注册中心
public interface FormatterRegistry extends ConverterRegistry {
void addPrinter(Printer<?> printer);
void addParser(Parser<?> parser);
void addFormatter(Formatter<?> formatter);
void addFormatterForFieldType(Class<?> fieldType, Formatter<?> formatter);
void addFormatterForFieldType(Class<?> fieldType, Printer<?> printer, Parser<?> parser);
void addFormatterForFieldAnnotation(AnnotationFormatterFactory<? extends Annotation> annotationFormatterFactory);
}
接口继承自类型转换器注册中心ConverterRegistry
,所以格式化注册中心,是转换器注册中心的加强版,是其超集,功能更多更强大。
目的:为指定类型fieldType
添加格式化器(printer或parser)。
FormatterRegistry接口的继承树如下:
有了学过ConverterRegistry的经验,这种设计套路很容易被看穿。这两个实现类按层级进行分工:
- FormattingConversionService:实现所有接口方法
- DefaultFormattingConversionService:继承自上面的FormattingConversionService,在其基础上注册默认的格式化器
ImportBeanDefinitionRegistrar
在spring应用启动过程,一些被@Import注解的类(这些类都实现了ImportBeanDefinitionRegistrar接口)会执行ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,然后生成BeanDefinition对象,并最终注册到BeanDefinitionRegistry中,为后续实例化bean做准备的。
ImportBeanDefinitionRegistrar的作用:是通过自定义的方式直接向容器中注册bean。
实现ImportBeanDefinitionRegistrar接口,在重写的registerBeanDefinitions方法中定义的Bean,就和使用xml中定义Bean效果是一样的。
ImportBeanDefinitionRegistrar是Spring框架提供的一种机制,允许通过api代码向容器批量注册BeanDefinition。
它实现了BeanFactoryPostProcessor接口,可以在所有bean定义加载到容器之后,bean实例化之前,对bean定义进行修改。
使用ImportBeanDefinitionRegistrar,我们可以向容器中批量导入bean,而不需要在配置文件中逐个配置。
Callback:
callback通常是一个接口,用于响应某类消息,进行后续处理;
一. 初始化和销毁的Callback
执行顺序:注解->接口->xml