mapper接口为什么能被@Autowired注入?
紧接上文mybatis源码阅读(一)之mybatis在springboot中的入口
上文聊到扫描出mapper接口,并生成BeanDefinition注册到spring容器中。
众所周知,spring在初始化bean的时候,要么是反射调用构造方法,要么是使用FactoryBean去getObject()。在我们编写的业务代码中并没有实现mapper接口,所以这里必然是使用后者。
下面进入正文:
ClassPathMapperScanner#doScan()方法调用了processBeanDefinitions();
private void processBeanDefinitions(Set<BeanDefinitionHolder> beanDefinitions) {
GenericBeanDefinition definition;
for (BeanDefinitionHolder holder : beanDefinitions) {
definition = (GenericBeanDefinition) holder.getBeanDefinition();
String beanClassName = definition.getBeanClassName();
...
// 替换
definition.