context:component-scan屬性介紹,SSM的bean被掃描兩次問題

GF_浪夏一學發表於2020-09-25

context:component-scan屬性

​  預設情況下,context:component-scan掃描包中註解所標 注的類,如@Component、@Service、@Controller、@Repository。

context:component-scan下的屬性值

context:component-scan的屬性描述
base-package掃描的基本包路徑,可以使用萬用字元配置
annotation-config是否啟用屬性注入註解,false則關閉屬性注入註解功能
name-generatorBean的ID策略生成器。指定你的構造型註解,註冊為Bean的ID生成策略
resource-pattern對資源進行篩選的正規表示式,具體細分在include-filter與exclude-filter中進行
scope-resolverscope解析器 ,與scoped-proxy只能同時配置一個
scoped-proxyscope的代理,與scope-resolver只能同時配置一個
use-default-filters是否使用預設的掃描過濾,預設值true

SSM配置 context:component-scan

  在使用SSM進行開發的時候,一般要求使用Spring配置檔案只掃描@Service,@Repository的bean ,而使用SpringMVC配置檔案只掃描@Controller。(防止掃描兩次bean)
  use-default-filters="true" 使用預設的過濾器,掃描全部註解(掃描@controller @service @Reposity @compont)

解決bean被掃描兩次的問題

exclude-filter 配置的不掃描(黑名單)
include-filter 配置的需要掃描(白名單)
use-default-filters 預設為true就是全掃描(false全部不掃描)

spring配置檔案配置:

<!-- use-default-filters="true" 使用預設的過濾器 掃描@controller @service @Reposity @compont等所有註解
<context:exclude-filter> 配置避免掃描controller 
-->
<context:component-scan base-package="包路徑" use-default-filters="true">
        <!-- 掃描的時候不掃描Controller-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

springmvc配置檔案配置:

<!-- use-default-filters="false" 所有都不會掃描 -->
<context:component-scan base-package="com.xgf.springmvc.ajax" use-default-filters="false">
		<!--context:include-filter 只掃描@Controller -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

相關文章