Spring context:component-scan的使用及說明
Spring context:component-scan的使用
在xml配置了這個標簽后,spring可以自動去掃描base-pack下面或者子包下面的java文件,
如果掃描到有@Component @Controller@Service等這些注解的類,則把這些類注冊為bean
注意
如果配置了<context:component-scan>那么<context:annotation-config/>標簽就可以不用再xml中配置了,因為前者包含了后者。
另外<context:component-scan>還提供了兩個子標簽
<context:include-filter><context:exclude-filter>
在說明這兩個子標簽前,先說一下<context:component-scan>有一個use-default-filters屬性,該屬性默認為true,這就意味著會掃描指定包下的全部的標有@Component的類,并注冊成bean。
也就是@Component的子注解@Service,@Reposity等。
所以如果僅僅是在配置文件中這么寫
<context:component-scan base-package="tv.huan.weisp.web"/>
Use-default-filter此時為true那么會對base-package包或者子包下的所有的進行java類進行掃描,并把匹配的java類注冊成bean。
可以發(fā)現(xiàn)這種掃描的粒度有點太大,如果你只想掃描指定包下面的Controller,該怎么辦?
此時子標簽<context:incluce-filter>就起到了勇武之地。
如下所示:
<context:component-scan?base-package="tv.huan.weisp.web .controller">?? <context:include-filter?type="annotation"?expression="org.springframework.stereotype.Controller"/>??? </context:component-scan>??
這樣就會只掃描base-package指定下的有@Controller下的java類,并注冊成bean
但是因為use-dafault-filter在上面并沒有指定,默認就為true,所以當把上面的配置改成如下所示的時候,就會產(chǎn)生與你期望相悖的結(jié)果(注意base-package包值得變化)
<context:component-scan?base-package="tv.huan.weisp.web">?? <context:include-filter?type="annotation"?expression="org.springframework.stereotype.Controller"/>??? </context:component-scan>??
此時,spring不僅掃描了@Controller,還掃描了指定包所在的子包service包下注解@Service的java類
此時指定的include-filter沒有起到作用,只要把use-default-filter設置成false就可以了。
這樣就可以避免在base-packeage配置多個包名這種不是很優(yōu)雅的方法來解決這個問題了。
另外在我參與的項目中可以發(fā)現(xiàn)在base-package指定的包中有的子包是不含有注解了,所以不用掃描,此時可以指定<context:exclude-filter>來進行過濾,說明此包不需要被掃描。
綜合以上說明
Use-dafault-filters=”false”的情況下:
<context:exclude-filter>指定的不掃描<context:include-filter>指定的掃描
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
spring使用validation參數(shù)及全局異常檢測方式
本文主要介紹了Java的數(shù)據(jù)校驗規(guī)范validation-api,包括其定義的注解和HibernateValidator的實現(xiàn),還介紹了spring-boot-starter-validation的使用,可以讓開發(fā)者在SpringBoot應用中簡化數(shù)據(jù)校驗的功能2025-02-02
SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解
這篇文章主要為大家介紹了SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
詳解Spring Cloud中Hystrix 線程隔離導致ThreadLocal數(shù)據(jù)丟失
這篇文章主要介紹了詳解Spring Cloud中Hystrix 線程隔離導致ThreadLocal數(shù)據(jù)丟失,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用
這篇文章主要介紹了詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有實用價值,需要的朋友可以參考下2017-05-05

