MapperScan和ComponentScan同時使用問題


@MapperScan:
1.首先了解@Mapper
    在接口上添加了@Mapper,在編譯之后就會生成相應的接口實現類。
    不過需要在每個接口上面進行配置,為了簡化開發,就有了 @MapperScan。

@MapperScan:

指定要變成實現類的接口所在的包,然后包下面的所有接口在編譯之后都會生成相應的實現類。

@ComponentScan:
會自動掃描包路徑下面的所有@Controller、@Service、@Repository、@Component 的類,並把符合掃描規則的類裝配到spring容器中。

@MapperScan和@ComponentScan可以同時使用。


如果都是掃描的相同路徑時,對於同一個接口,可能就會出現識別錯誤。比如

在springBoot項目的Application上面定義了

@MapperScan(basePackages = { "com" })
@SpringBootApplication
@SpringBootApplication包含了@ComponentScan。
在此項目下面有一個接口是com.xxInf,實現是
com.xxImpl在實現類上面通過@Service加入spring容器中
我們在注入的時候接口時
    @Autowired
    private com.xxInf xx;

可能識別的不是xxImpl,而去mybatis里面通過反射找綁定,這樣就會出現BindingException錯誤

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

所以在設計項目結構的時候要把mapper放到一個合適的位置,通過設置MapperScan的路徑basePackages 好避免這種沖突

 
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM