购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.6 SharedMetadataReaderFactoryContextInitializer分析

本节将对SharedMetadataReaderFactoryContextInitializer进行分析,关于该对象的基础定义代码如下:

class SharedMetadataReaderFactoryContextInitializer
      implements ApplicationContextInitializer<ConfigurableApplicationContext>,
Ordered {}

从对象的基础定义中可以发现并未实现其他接口,下面对ApplicationContextInitializer的实现方法进行说明,详细代码如下:

public void initialize(ConfigurableApplicationContext applicationContext) {
   // 创建Bean工厂后置处理器
   BeanFactoryPostProcessor postProcessor = new
CachingMetadataReaderFactoryPostProcessor(applicationContext);
   // 添加Bean工厂后置处理器
   applicationContext.addBeanFactoryPostProcessor(postProcessor);
}

在initialize方法中主要执行目标是创建Bean工厂后置处理器,类型是CachingMetadataR-eaderFactoryPostProcessor,创建后将其加入应用上下文中。在initialize方法中最关键的对象是CachingMetadataReaderFactoryPostProcessor,接下来将对该对象进行分析。关于该对象的基础定义代码如下:

static class CachingMetadataReaderFactoryPostProcessor
      implements BeanDefinitionRegistryPostProcessor, PriorityOrdered {}

从上述基础定义中可以发现它实现了BeanDefinitionRegistryPostProcessor,关于该接口,对于CachingMetadataReaderFactoryPostProcessor而言,主要关注postProcessBeanDefinitionRegistry方法即可,详细代码如下:

    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
throws BeansException {
        register(registry);
        configureConfigurationClassPostProcessor(registry);
    }

在postProcessBeanDefinitionRegistry方法中进行了以下两个操作:

(1)注册Bean定义,具体注册的Bean类型是SharedMetadataReaderFactoryBean;

(2)配置类后置处理器。

关于配置类后置处理器的实际操作如下:

(1)Bean定义类型是AbstractBeanDefinition时将添加Supplier接口的实现类,具体类型是ConfigurationClassPostProcessorCustomizingSupplier;

(2)为Bean定义属性表添加metadataReaderFactory属性。 wr4hIWn/QyXtsBogmOLX6PvcFoDOupVV6tY3WJSnN2BDgCk+0DYRzRDGJ87ezHqh

点击中间区域
呼出菜单
上一章
目录
下一章
×