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.findByIdat 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產生異常
總結
以上是生活随笔為你收集整理的Spring源码分析【8】-MyBatis注解方法不能重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring源码分析【4】-Spring
- 下一篇: Java飞行记录器 JRockit Fl