Spring源码分析【8】-MyBatis注解方法不能重载

代码如下:

《Spring源码分析【8】-MyBatis注解方法不能重载》

这是不可以的,会报错:

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 MapperFactoryBeanmybatis-spring.jar

《Spring源码分析【8】-MyBatis注解方法不能重载》

原因一步步调试出来

org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig

《Spring源码分析【8】-MyBatis注解方法不能重载》

class Configuration在mybatis.jar

org.apache.ibatis.session.Configuration.addMapper

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.binding.MapperRegistry.addMapper

《Spring源码分析【8】-MyBatis注解方法不能重载》

knownMappers

《Spring源码分析【8】-MyBatis注解方法不能重载》

MapperProxyFactory

《Spring源码分析【8】-MyBatis注解方法不能重载》

knownMappers.put

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse

《Spring源码分析【8】-MyBatis注解方法不能重载》

Method[] methods = type.getMethods();

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

resultMapId = parseResultMap(method);

《Spring源码分析【8】-MyBatis注解方法不能重载》

parseResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

applyResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

applyResults

《Spring源码分析【8】-MyBatis注解方法不能重载》

applyResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

addResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

回到applyResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

回到parseResultMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

回到parseStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

statementBuilder.parameterMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.mapping.MappedStatement.parameterMap

《Spring源码分析【8】-MyBatis注解方法不能重载》

回到addMappedStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

org.apache.ibatis.mapping.MappedStatement.Builder.build

《Spring源码分析【8】-MyBatis注解方法不能重载》

回到addMappedStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

重点来了

org.apache.ibatis.session.Configuration.addMappedStatement

《Spring源码分析【8】-MyBatis注解方法不能重载》

mappedStatements定义

《Spring源码分析【8】-MyBatis注解方法不能重载》

StrictMap定义继承自HashMap重写了put

多了一行判断

if (containsKey(key)) 

《Spring源码分析【8】-MyBatis注解方法不能重载》

第一次当然是containsKey(key)=false

《Spring源码分析【8】-MyBatis注解方法不能重载》

返回addMappedStatement,mappedStatements添加完成

《Spring源码分析【8】-MyBatis注解方法不能重载》

一直退到parse

《Spring源码分析【8】-MyBatis注解方法不能重载》

第二次for循环methods

《Spring源码分析【8】-MyBatis注解方法不能重载》

一直下一步…到了第二次mappedStatements.put

《Spring源码分析【8】-MyBatis注解方法不能重载》

containsKey(key)==true产生异常

《Spring源码分析【8】-MyBatis注解方法不能重载》

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/unix21/article/details/52239514
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞