一、SSA
之前的文章也有写过mybatis拓展spring的分析。我们可以知道mybatis在拓展spring的时候用了spring的两个拓展接口
- mybatis实现spring的FactoryBean接口,这个接口有个getObject方法,重写此方法方便给Dao接口做代理。做代理的原因很简单Dao接口无法直接查询数据库,mybatis的通用代理对象的目的就是在代理对象内部配置好数据源,传入你的mapperInterface即mapper接口到代理对象,即可查数据库。
- mybatis实现spring的ImportBeanDefinitionRegistrar接口,重写它registerBeanDefinitions方法,此方法传入了BeanDefinitionRegistry,顾名思义就是注册spring的建模类beandefinition。把上面的代理对象转化成beandefinition注入spring容器。
实际上常用spring拓展还有几个:
- 实现BeanFactoryPostProcessor接口, 可以修改spring的建模类beandefinition,与此接口常伴随使用的有PriorityOrdered(先)和Ordered(后)这两个都与执行的优先级有关。
- 实现BeanPostProcessor 接口,可以根据指定的beanName来操作这个bean生成前后做一些操作。
- 实现BeanFactoryAware接口可以拿到BeanFactory,那就可以根据beanName在bean工厂拿到相应的bean。即除了获取spring上下文对象ApplicationContext来获取bean之外实现BeanFactoryAware方法也是可以的.
- 实现ApplicationContextAware接口获取spring上下文对象ApplicationContext。
二、GTTP
画了两三个小时,相较于调试源代码和查看文字博客,能更直观的了解spring与mybatis是如何互动的。
|