MapperScan和ComponentScan同時使用問題

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

@MapperScan:apache

指定要變成實現類的接口所在的包,而後包下面的全部接口在編譯以後都會生成相應的實現類。mybatis

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

@MapperScan和@ComponentScan能夠同時使用。spa


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

在springBoot項目的Application上面定義了code

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

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

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

因此在設計項目結構的時候要把mapper放到一個合適的位置,經過設置MapperScan的路徑basePackages 好避免這種衝突接口

相關文章
相關標籤/搜索