不知道大家想過沒有,我們使用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