标签:ibatis spring 源码
What is MyBatis-Spring Not Spring-Mybatis?官方介绍
第二版那样,Spring 3.0 也仅支持 iBatis2。那么,我们就想将 MyBatis3 的支持添加 到 Spring3.0(参考 Spring Jira 中的问题)中。而不幸的是,Spring
3.0 的开发在 MyBatis 3.0 官方发布前就结束了。 因为 Spring 开发团队不想发布一个基于非发布版的 MyBatis 的整合支 持,那么 Spring 官方的支持就不得不继续等待了。要在 Spring 中支持 MyBatis,MyBatis 社 区认为现在应该是自己团结贡献者和有兴趣的人一起来开始将 Spring 的整合作为 MyBatis 社 区的子项目的时候了
一.spring 的配置
注入映射器有两种方法
1.每个都搞一个,这个比较坑,可以选择忽略
2.配置路径然后全局扫描
上面那个虽然不容,但是可以告诉我们他是如何做的
二.注册
我们来看MapperScannerConfiguer,主要就是doScan
这个里面其实还是用了MapperFactoryBean
他把每个接口,用MapperFactoryBean 生成代理之后注册到spring
而MapperFactoryBean 是如何做的呢
MapperFactoryBean.getObject()---->SqlSessionTemplate.getMapper()--->Configuration.getMapper()
-----MapperRegistry.getMapper()----->MapperProxyFactory.newInstance()
经过了几层之后总算到了代理实现类 返回了我们的接口代理类MapperProxy计算注册完成了
3.执行
执行肯定是从MapperProxy.invoke方法开始.
然后mybatis根据xml配置文件或者方法的注解,的类型,这类涉及一个十分重要的类MapperMethod
这里mybatis就根据不同的返回类型,已经配置的不同类型,执行SqlSessionTemplate不同的方法
SqlSessionTemplate 再最后调用下执行方法然后就ok了,但是这里SqlSessionInterceptor拦截这个请求,然后统一处理了下
就这样,我们的接口编程就完成
这个原理倒是很简单,只不过,当初自己只是从mybatis-spring入手,看了需求没有发现如何实现,后来断点才观察到了整个过程,
希望给大家理解下吧
mybatis-spring如何做到接口编程的
标签:ibatis spring 源码
原文地址:http://blog.csdn.net/qjueyue/article/details/40825479