前言

紧接上一篇《理解springboot那些约定俗成的框架类名、全局context等命名规范,就可以读懂一半springboot的源代码》的解析与总结,这一篇,将继续汇总有关springboot那些注册与回调、监控与统计、设计模式相关等命名规范,搞懂此篇,大概可以读懂70%的springboot源代码!

注册与回调

Registrar:

注册并管理一系列资源,用于注册监听动作。

ImportBeanDefinitionRegistrar接口

为Spring应用程序的动态注册Bean提供了强大的机制。

通过实现该接口,我们可以根据各种条件和场景来注册Bean,从而实现更加灵活和可扩展的应用程序上下文管理。

无论是条件化注册、集成第三方库还是处理自定义注解,ImportBeanDefinitionRegistrar都能够帮助我们实现更高级的Spring配置和管理。

ImportBeanDefinitionRegistrar接口只有一个核心方法需要实现,即registerBeanDefinitions方法。该方法接受两个参数:

  1. AnnotationMetadata metadata:包含有关当前正在处理的注解类的元数据信息,如注解的属性值、类名等。
  2. 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的经验,这种设计套路很容易被看穿。这两个实现类按层级进行分工:

  1. FormattingConversionService:实现所有接口方法
  2. 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

方式1(继承接口):
10-25 05:50