Spring源码分析之`BeanFactoryPostProcessor`调用过程 (7)

scanner.registerFilters中的有效片段

// 添加一个直接返回true的过滤器 addIncludeFilter(new TypeFilter() { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { return true; } });

doScan

public Set<BeanDefinitionHolder> doScan(String... basePackages) { // 直接走的就是Spring的扫描逻辑了,但现在过滤器只有一个默认全放行的 Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages); if (beanDefinitions.isEmpty()) { logger.warn("No MyBatis mapper was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration."); } else { // 处理扫描出来的BeanDefinition,这里就是我们思考中搞成`FactoryBean`的逻辑 processBeanDefinitions(beanDefinitions); } return beanDefinitions; }

我们思考中重写的扫描逻辑

@Override protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { // 放行是接口的类 return beanDefinition.getMetadata().isInterface() && beanDefinition.getMetadata().isIndependent(); }

摘取processBeanDefinitions中的代码片段

private void processBeanDefinitions(Set<BeanDefinitionHolder> beanDefinitions) { GenericBeanDefinition definition; for (BeanDefinitionHolder holder : beanDefinitions) { definition = (GenericBeanDefinition) holder.getBeanDefinition(); // 将原来的接口mapper放到beanDefintion的构造方法参数中,以指定的构造方法实例化 definition.getConstructorArgumentValues().addGenericArgumentValue(definition.getBeanClassName()); // 注意这里:将原来的beanClass替换成FactoryBean了! definition.setBeanClass(this.mapperFactoryBean.getClass()); } }

Mybatis整合Spring的过程大致就是这些了

Spring 源码系列

Spring源码分析之 IOC 容器预启动流程(已完结)

Spring源码分析之BeanFactory体系结构(已完结)

Spring源码分析之BeanFactoryPostProcessor调用过程(已完结)

Spring源码分析之Bean的创建过程

Spring源码分析之什么是循环依赖及解决方案

Spring源码分析之AOP从解析到调用

Spring源码分析之事务管理(上),事物管理是spring作为容器的一个特点,总结一下他的基本实现与原理吧

Spring源码分析之事务管理(下) ,关于他的底层事物隔离与事物传播原理,重点分析一下

Spring Mvc 源码系列

SpringMvc体系结构

SpringMvc源码分析之Handler解析过程

SpringMvc源码分析之请求链过程

Mybatis 源码系列

暂定

追更,可关注我,近期有时间就文章全写完,分享纯粹为了乐趣,也有一种成就感吧,笔者这篇文章先就到这

关注笔者公众号:奇客时间,获取互联网公司面试真题,回复关键字形式:公司-部门-面试轮次,例如 阿里-蚂蚁金服-一面,自动回复面试真题;当前已经收录如下:

字节跳动-抖音-面试轮次, 搜狐-搜索组-面试轮次, OPPO-商城-面试轮次, 58同城-基础架构部-面试轮次,湖南台-芒果TV-面试轮次 , 腾讯-乘车码-面试轮次 , 腾讯-微信支付-面试轮次 , 腾讯-零售新业务-面试轮次 , 腾讯-直播平台-面试轮次, 快手-广告业务部-面试轮次 , 贝壳找房-商品组-面试轮次 , 百度-信息流-面试轮次 , 京东-零售-面试轮次 , 京东-物流-面试轮次 , 京东-电商-面试轮次 , 滴滴-小桔车服-面试轮次 , 滴滴-金融-面试轮次 , 阿里-高德-面试轮次 , 阿里-大文娱-面试轮次 , 阿里-健康-面试轮次 , 阿里-蚂蚁金服-面试轮次 , 美团-外卖-面试轮次 , 美团-风控-面试轮次

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzgyx.html