Spring排除功能

2021-10-14 15:33:34 字數 2901 閱讀 1074

我們都知道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.configcon.leo.controllercon.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...