Spring源码分析【8】-MyBatis注解方法不能重载
2016-08-18 11:48
1091 查看
代码如下:
这是不可以的,会报错:
class MapperFactoryBean在mybatis-spring.jar
原因一步步调试出来
org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig
class Configuration在mybatis.jar
org.apache.ibatis.session.Configuration.addMapper
org.apache.ibatis.binding.MapperRegistry.addMapper
knownMappers
MapperProxyFactory
knownMappers.put
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse
Method[] methods = type.getMethods();
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement
resultMapId = parseResultMap(method);
parseResultMap
applyResultMap
applyResults
applyResultMap
addResultMap
回到applyResultMap
回到parseResultMap
回到parseStatement
org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement
statementBuilder.parameterMap
org.apache.ibatis.mapping.MappedStatement.parameterMap
回到addMappedStatement
org.apache.ibatis.mapping.MappedStatement.Builder.build
回到addMappedStatement
重点来了
org.apache.ibatis.session.Configuration.addMappedStatement
mappedStatements定义
StrictMap定义继承自HashMap重写了put
多了一行判断
if (containsKey(key))
第一次当然是containsKey(key)=false
返回addMappedStatement,mappedStatements添加完成
一直退到parse
第二次for循环methods
一直下一步...到了第二次mappedStatements.put
containsKey(key)==true产生异常
这是不可以的,会报错:
2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] - Error while adding the mapper 'interface com.unix21.mapper.UserMapper' to configuration. java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.unix21.mapper.UserMapper.findById at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:837) at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:809) at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:633) at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:302) at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement(MapperAnnotationBuilder.java:325) at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:130) at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72) at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:706) at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:81)
class MapperFactoryBean在mybatis-spring.jar
原因一步步调试出来
org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig
class Configuration在mybatis.jar
org.apache.ibatis.session.Configuration.addMapper
org.apache.ibatis.binding.MapperRegistry.addMapper
knownMappers
MapperProxyFactory
knownMappers.put
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse
Method[] methods = type.getMethods();
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement
resultMapId = parseResultMap(method);
parseResultMap
applyResultMap
applyResults
applyResultMap
addResultMap
回到applyResultMap
回到parseResultMap
回到parseStatement
org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement
statementBuilder.parameterMap
org.apache.ibatis.mapping.MappedStatement.parameterMap
回到addMappedStatement
org.apache.ibatis.mapping.MappedStatement.Builder.build
回到addMappedStatement
重点来了
org.apache.ibatis.session.Configuration.addMappedStatement
mappedStatements定义
StrictMap定义继承自HashMap重写了put
多了一行判断
if (containsKey(key))
第一次当然是containsKey(key)=false
返回addMappedStatement,mappedStatements添加完成
一直退到parse
第二次for循环methods
一直下一步...到了第二次mappedStatements.put
containsKey(key)==true产生异常
相关文章推荐
- Mybatis结合Spring注解自动扫描源码分析
- mybatis3 spring整合的好方案及其使用注解操作的方法如下
- (转)Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- Spring源码分析方法
- 做一个合格的程序猿之浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
- 改版后spring,mybatis,hibernate及源码下载方法
- spring事务源码分析结合mybatis源码(三)
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- spring事务源码分析结合mybatis源码(一)
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义