阅读(2972) (0)

14. Mybatis 与Spring MVC的整合 ?

2017-11-24 17:30:39 更新

问题: Mybatis 与Spring MVC的整合 ?

Spring整合Mybatis底层原理实现步骤 1.首先Spring主要做对Bean的管理,包含bean的初始化等信息 spring内部有一个BeanDefinition 有一系列对Bean的描述,包含单例/多例 beanName BeanClass等信息,也可以理解成 标签所描述的信息 2.spring集成了Mybatis 那么也要管理mybatis相关联的bean,我们经常使用的通常是定义xxxMapper 的接口,想要接口被Spring管理必须需要对应类实例化,所以就需要的动态代理相关内容,我们所知的已知接口可以使用JDK动态代理为mapper相关生成代理类,放入spring 容器种等待调用 然后就可以使用@Autowired xxxMapper获取具体的实例 3.mybatis相关代理类生成的时机,已知spring的bean的流程 扫描指定包路径下的Class文件,根据class信息生成对应的BeanDefinition 这里根据时机修改beanDefinition信息也就是为mapper生成代理类 根据BD生成bean实例,把实例放入spring容器中 4.spring处理的流程是 class-->组建beanDefinition->为mapper生成对应的BeanDefinition >BeanFactory 进行处理,-->beanFactory后续处理,-->实例化生成Bean实例放入spring容器中 至于如何生成bean就可以由FactoryBean去自定义生成我们需要的mapper的bean对象

正式环境使用中 1.使用@MapperScan注解放入需要扫描的mapper的接口包路径 2.内部使用@Import导入MapperScannerRegistrar.class 来实现生成代理Mapper类的步骤 3.实现registerBeanDefinition方法扫描@MapperScan注解拿到扫描路径 4.调用spring类拿到BeanDefinition需要的所有的Mapper接口等待生成代理类 5.创建的definition设置构造方法传递的是被代理类的Class及我们自己写的Mapper接口,为definition设置beanClass为MapperFacotryBean.class(org.mybatis.spring.mapper.MapperFactoryBean)添加到spring容器中 6.在实例化bean实例的时候调用MapperFactoryBean 的getObject方法里面使用jdk动态代理生成对应的代理实例,供项目使用 至此 spring中整合myatis 并合理使用