SSM框架搭建及源码解析--spring的BeanFactoryPostProcessor扩展(三)

BeanFactoryPostProcessor是spring预留在启动时的扩展点
在refresh()方法中invokeBeanFactoryPostProcessors()就是用于获取BeanFactoryPostProcessor实现类,并调用实现类的postProcessBeanDefinitionRegistry()
我们以mybatis与spring集成的配置为例

    class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.demo.**.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    

MapperScannerConfigurer类就是实现了BeanFactoryPostProcessor接口

  public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
    if (this.processPropertyPlaceHolders) {
      processPropertyPlaceHolders();
    }

    ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
    scanner.setAddToConfig(this.addToConfig);
    scanner.setAnnotationClass(this.annotationClass);
    scanner.setMarkerInterface(this.markerInterface);
    scanner.setSqlSessionFactory(this.sqlSessionFactory);
    scanner.setSqlSessionTemplate(this.sqlSessionTemplate);
    scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);
    scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName);
    scanner.setResourceLoader(this.applicationContext);
    scanner.setBeanNameGenerator(this.nameGenerator);
    scanner.registerFilters();
    scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS));
  }

在spring容器启动时,加载有@MapperScan注解的类到容器中,用于Dao层类与mapper文件的映射。如此就对spring进行了扩展。

你可能感兴趣的:(java,spring,源码,框架)