我們都知道component-scan在springmvc或者springboot中可以掃瞄包路徑,但是我們如何使用裡面的屬性排除不需要掃瞄的類?
方式一:
使用spring的xml配置方式實現,這個是基本功,知道這種方式,那麼註解方式就容易理解了
裡面的type有以下幾種型別,用法不一一舉例了,大家可以自己嘗試。
過濾器型別
描述annotation
過濾器掃瞄使用註解標註的那些類,並通過expression指定註解全類名
assignable
過濾器掃瞄派生於expression屬性指定的類
aspectj
過濾器掃瞄與expression屬性所指定的aspectj表示式所匹配的那些類
custom
使用自定義的org.springframework.core.type.typefliter實現類,並通過expression指定全類名
regex
過濾器掃瞄類的名稱與expression屬性指定正規表示式所匹配的那些類
方式二:
這種是通過@component-scan方式在配置掃瞄包路徑的時候直接不包含要排除的包。舉例說明一下如下:
專案的包路徑是:com.leo.config
、con.leo.controller
、con.leo.service
我不需要掃瞄com.leo.config
,那麼配置@component-scan的時候就可以使用下面的配置直接不用掃瞄com.leo.config
@componentscan(basepackages = )
方式三:
其實大部分的情況是我們只有com.leo.config
下面的某個類需要排除,那麼可以使用filtertype.assignable_type
排除。參考如下配置
方式四:
如果上面的class非常多的話,使用上面的方式就不太合適了,那我們可以使用filtertype.annotation
加自定義註解去實現。參考如下配置
@componentscan(basepackages = , excludefilters = @componentscan.filter(type = filtertype.annotation, classes = scanignore.class))
自定義@scanignore
實現
@target()@retention(retentionpolicy.runtime)@documentedpublic @inte***ce scanignore {}
方式五:
也可通過自定義的過濾器去實現。使用filtertype.custom
加上自定義的過濾器
@componentscan(basepackages = , excludefilters = @componentscan.filter(type = filtertype.custom, classes = mytypefilter.class))
自定義過濾器mytypefilter
public class mytypefilter implements typefilter
return true;
}}
方式六:
@componentscan(basepackages = , excludefilters = @componentscan.filter(type = filtertype.regex, pattern = "com.leo.config.*"))
方式七:
方式八:
如果是在類中使用@bean宣告的類例項,得不到類限定名稱,也得不到該類的 class 。因此無法使用上述方法進行排除,可以使用下面的方法進行處理
解決方案1:
使用beandefinitionregistrypostprocessor,直接在 解析完bean的註冊資訊後,直接移除就行,這樣就不會建立bean(該方式是通用型最好的方式,適用於動態新增或者刪除各種方式註冊的bean)
@component
public class removeregistybeanfactorypostprocessor implements beandefinitionregistrypostprocessor
}@override
public void postprocessbeanfactory(configurablelistablebeanfactory configurablelistablebeanfactory) throws bean***ception
}
解決方案2:
在使用@bean註解自動裝配類例項時,使用@conditional進行判斷,如果符合某種條件,則裝配該例項。
總結:以上都是通過excludefilters
實現排除不需要類的方式,如果是反向操作,需要新增需要的類,則將上面的關鍵字替換為includefilters
就好了。如果是配置檔案的實現則
替換成
spring的配置檔案是基礎,後面的無論是springmvc亦或者是springboot都是在這個基礎上擴充套件的。
Spring 支援 RESTful 功能
1,了解 restful 定義是 資源狀態轉移 restful 區別於非restful 有幾點 前者的url是面向資源型的 後者的url是服務型的,關注行為和動作 前者url是引數化的,有層級的 後者url是輸入的 前者url是引數化,spring 3.0 引入了 註解 pathvariable,獲...
詳解spring 仿springIOC功能的實現2
剩下的事情就是來擴充我們這個工具類,也就是實現其中的3個方法 一 實現xml檔案的解析 private void par ml string filename bi.setprolist pilist bilist.add bi catch exception e 另一種解析xml檔案的方法 sax...
Spring使用 AOP 實現 日誌功能
乙個簡單版本。在寫aop 實現日誌功能時,如果你對aop 一些內建屬性不清楚的,可結合此部落格 環境 ssm entity table name logtable setter getter public class logtable target retention retentionpolicy...