Mybatis通过动态代理Mapper接口代理类进行数据库访问
Spring中整合Mybatis应该如何将这个动态代理类注入Spring容器成为Bean呢
Spring中Bean的产生方式?
- 通过配置定义 产生BeanDefinition–>BeanFactoryPostProcessor–>Bean
- 在后置处理器中 自定义一个BeanDefinition设置并生成bean
- @Bean注意生成Bean(但只能生成一个)
- 自定义XxxFactoryBean实现接口FactoryBean接口,实现自定义的Bean
- 使用注解@Import,也会创建对象并注入容器中
- 通过DefaultListableBeanFactory注入。listableBeanFactory.registerSingleto(….)
如何整合?
- Mybatis使用@Import(MapperRegister.class 工厂bean生产创建逻辑负责的bean的工厂)
- 首先实现一个MapperFactoryBean类其实现了FactoryBean接口,可以通过构造方法传入不同的Mapper,然后利用SqlSession代理生产mapper代理对象.
- 实现MapperRegister类,这个类实现了ImportBeanDefinitionRegistrar接口