不知道大家想过没有,我们使用mybatis的时候只要写接口和配置上一个sql语句就可以了,单从代码的角度来看,这是不合理的。
所以我们通常在service里面注入的mapper它其实是一个代理对象
回到本人上一篇博客spring给容器中注入组件的几种方式
1.包扫描+组件注解标签注解
这种方式一般适用于自己写的类,动态代理的类无法添加(就算你自己动态生成的类上有注解标签,spring也无法扫描)
2.@bean
这种方式适用于加入第三方库中的类
这种方式真的可以吗?仔细想想,这种方式只能一个一个添加,像mybatis有这么多的mapper我们一个一个的加就麻烦了
3.@improt
这种方式的简单用法是肯定不行的,因为是动态生成的类,你无法再类写@improt(xxxx.class)
4.使用spring提供的factoryBean
写一个类实现factoryBean接口,重写getObject方法
这种方式显然和@bean有一样的缺陷,返回值只能有一个,还是要一个一个添加
======================================主文来了=======================================
解决办法就是@improt>>>>实现ImportBeanDefinitionRegistrar接口+.使用spring提供的factoryBean
=============================这样就OK了,讲讲思路==================================
1.循环注册
2.FactoryBean这个类被我们注册到了容器中,所有可以使用spring容器中的组件 如sqlsessionFactoryBean