spring加载mybatis过程
两个主要的配置类:
SqlSessionFactoryBean: Spring就是利用它来创建Mybatis的SqlSessionFactory。
MapperScannerConfigurer:Spring就是用它来扫描我们的mapper接口,并注册到IOC容器中。
接下来分析:
Spring是如何帮助我们自动创建SqlSessionFactory的?
SqlSessionFactoryBean实现了三个接口,一个是InitialzingBean,另一个是FactoryBean,还有就是ApplicationListener接口。
InitialzingBean接口:实现了该接口,当bean初始化时,spring就会调用该接口的 afterPropertiesSet方法,去实现当spring初始化该bean时所需要的逻辑。
FactoryBean接口:实现该接口,在调用getBean时候会返回该工厂返回的实例对象,也就是再调一次getObject方法返回工厂的实例。
ApplicationListener接口:实现了该接口,如果注册了该监听的话,就可以监听到Spring的一些事件,然后做相应的处理。
看一下:SqlSessionFactoryBean类的afterPropertiesSet()做了什么事情?
答:通过buildSqlSessionFactory()方法创建了一个SqlSessionFactory。接下来就是Myabtis的哪些build()方法的逻辑。
接下来看一下:如何获取SqlSessionFactoryBean实例?
前面说了实现了FactoryBean接口,所以通过getBean获取它的实例的时候就是调用getObject()方法,获取到的是sqlSessionFactory。
三.Mapper接口的获取
也就是看Spring是如何加载我们的Mapper接口的。Spring里面主要通过MapperScannerConfigcrer类来扫描我们的mapper接口,并将他们注册到IOC容器中。
那么我们是如何从Spring容器中获取mapper接口的?
主要是这个类MapperFactoryBean类,因为实现了FactoryBean接口,那么在调用getBean方法获取MapperFactpry实例的时候,实际上调用的就是getObject方法。getObject方法调用了getMapper,所以我们不需要手动去管理SqlSession,是spring帮我们自动管理并获取mapper接口的。