問題: Mybatis 與Spring MVC的整合 ?
Spring整合Mybatis底層原理實(shí)現(xiàn)步驟 1.首先Spring主要做對(duì)Bean的管理,包含bean的初始化等信息 spring內(nèi)部有一個(gè)BeanDefinition 有一系列對(duì)Bean的描述,包含單例/多例 beanName BeanClass等信息,也可以理解成 標(biāo)簽所描述的信息 2.spring集成了Mybatis 那么也要管理mybatis相關(guān)聯(lián)的bean,我們經(jīng)常使用的通常是定義xxxMapper 的接口,想要接口被Spring管理必須需要對(duì)應(yīng)類實(shí)例化,所以就需要的動(dòng)態(tài)代理相關(guān)內(nèi)容,我們所知的已知接口可以使用JDK動(dòng)態(tài)代理為mapper相關(guān)生成代理類,放入spring 容器種等待調(diào)用 然后就可以使用@Autowired xxxMapper獲取具體的實(shí)例 3.mybatis相關(guān)代理類生成的時(shí)機(jī),已知spring的bean的流程 掃描指定包路徑下的Class文件,根據(jù)class信息生成對(duì)應(yīng)的BeanDefinition 這里根據(jù)時(shí)機(jī)修改beanDefinition信息也就是為mapper生成代理類 根據(jù)BD生成bean實(shí)例,把實(shí)例放入spring容器中 4.spring處理的流程是 class-->組建beanDefinition->為mapper生成對(duì)應(yīng)的BeanDefinition >BeanFactory 進(jìn)行處理,-->beanFactory后續(xù)處理,-->實(shí)例化生成Bean實(shí)例放入spring容器中 至于如何生成bean就可以由FactoryBean去自定義生成我們需要的mapper的bean對(duì)象
正式環(huán)境使用中 1.使用@MapperScan注解放入需要掃描的mapper的接口包路徑 2.內(nèi)部使用@Import導(dǎo)入MapperScannerRegistrar.class 來實(shí)現(xiàn)生成代理Mapper類的步驟 3.實(shí)現(xiàn)registerBeanDefinition方法掃描@MapperScan注解拿到掃描路徑 4.調(diào)用spring類拿到BeanDefinition需要的所有的Mapper接口等待生成代理類 5.創(chuàng)建的definition設(shè)置構(gòu)造方法傳遞的是被代理類的Class及我們自己寫的Mapper接口,為definition設(shè)置beanClass為MapperFacotryBean.class(org.mybatis.spring.mapper.MapperFactoryBean)添加到spring容器中 6.在實(shí)例化bean實(shí)例的時(shí)候調(diào)用MapperFactoryBean 的getObject方法里面使用jdk動(dòng)態(tài)代理生成對(duì)應(yīng)的代理實(shí)例,供項(xiàng)目使用 至此 spring中整合myatis 并合理使用
更多建議: