最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于ComponentScan注解的掃描范圍及源碼解析

 更新時間:2023年09月25日 08:58:14   作者:春秋戰(zhàn)國程序猿  
這篇文章主要介紹了基于ComponentScan注解的掃描范圍及源碼解析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一.ComponentScan注解的默認(rèn)掃描范圍

ComponentScan注解的默認(rèn)掃描范圍是啟動程序XxxApplication. java所在目錄及其下的所有子包。

為了方便理解,我們看一下下面這個圖片。

這個項(xiàng)目中的啟動類是:SpringbootApplication.java

該啟動類所在的目錄是:springboot

那么ComponentScan注解的默認(rèn)掃描范圍是:springboot目錄及其下面的所有子包。

二.如何修改ComponentScan注解的掃描范圍

ComponentScan注解即可以掃描包,也可以掃描指定的類。

我們只需要指定一個包掃描的路徑,就可以實(shí)現(xiàn)更改包掃描路徑的功能了。

1.ComponentScan注解掃描包

@ComponentScan({"com.company.user","com.company.service"})

2.ComponentScan注解掃描類。

@ComponentScan(basePackageClasses={XxxService.class})

三.ComponentScan注解

ComponentScan注解中定義了12個屬性,我們下面詳細(xì)來看一下。

我們的討論是基于java8的,spring-context的版本是4.3.7。

1.String[] value() default {};

指定包掃描路徑,value屬性的值,就是項(xiàng)目中的一個具體路徑。

value屬性的類型是String數(shù)組,也就是支持一次指定多個包掃描路徑。

這個屬性上面添加了一個注解,@AliasFor("basePackages"),這個注解的意思就是說,value這個屬性等價于basePackages屬性。

關(guān)于basePackages屬性,下面會講到。

2.String[] basePackages() default {};

指定包掃描路徑,basePackages屬性的值,就是項(xiàng)目中的一個具體路徑。

  • basePackages屬性的類型是String數(shù)組,也就是支持一次指定多個包掃描路徑。
  • basePackages屬性上面添加了一個注解,@AliasFor("value"),這個注解的意思就是說,basePackages這個屬性等價于value屬性。

3.Class<?>[] basePackagesClasses() default {};

掃描具體的類。

basePackagesClasses屬性的類型是Class數(shù)組,也就是說支持同時指定多個掃描類。

4,Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator. class;

配置beanName生成器,默認(rèn)是BeanNameGenerator。

一般情況下,我們都是使用默認(rèn)的beanName生成器,但是Spring實(shí)現(xiàn)了beanName生成器的可配置。

5,Class<? extends ScopeMetaDataResolver> scopeResolver() default AnnotationScopeMetaDataResolver.class;

處理檢測到的bean的scope范圍。

什么意思呢?

我們都知道spring的bean是有作用域的,默認(rèn)是singleton,這個默認(rèn)值就是在ScopeMetaData類中指定的:

private String scopeName = "singleton";

這個屬性也是可選配置,默認(rèn)的處理bean作用域的實(shí)現(xiàn)類是AnnotationScopeMetaDataResolver.class。

源碼比較簡單,就是取注解上獲取指定的scope的value值,如果沒有配置,就是用默認(rèn)的singleton。

6.ScopedProxyMode scopedProxy() default ScopedProxyMode. DEFAULT;

是否為檢測到的組件生產(chǎn)代理。

ScopedProxyMode是一個枚舉類,可選值有四個:

  • DEFAULT
  • NO
  • INTERFACES
  • TARGET_CLASS

7.String resourcePattern() default """**/*.class";

控制符合組件檢測條件的類文件,默認(rèn)是包掃描下的 **/*.class。

8.boolean useDefaultFilters() default true;

是否對含有以下注解的類開啟檢測,默認(rèn)是開啟的。

  • @Component
  • @Repository
  • @Service
  • @Controller

9.ComponentScan.Filter[] includeFilters() default {};

指定某些Filter掃描到的類。聽起來有些費(fèi)勁,說白了就是指定了類型,掃描指定的這些類型。

可選類型有5種,定義在枚舉類FilterType中:

  • 第一種:ANNOTATION
  • 第二種:ASSIGNABLE_TYPE
  • 第三種:ASPECTJ
  • 第四種:REGEX,正則表達(dá)式。
  • 第五種:CUSTOM,自定義類型。

10.ComponentScan.Filter[] excludeFilters() default {};

排除過濾器掃描的的類。

11.boolean lazyInit() default false;

掃描到的類是否開啟懶加載,默認(rèn)不開啟。

12.

@Retention(RetentionPolicy.RUNTIME);
@Target({})
public @interface Filter {
FilterType type() default FilterType. ANNOTATION;
@AliasFor("classes")
Class<?>[] value() default {};
@AliasFor("value")
Class<?>[] classes() default {};
String[] pattern() default {};
}

ComponentScan的內(nèi)部接口,主要是對Filter的封裝。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java避免死鎖_動力節(jié)點(diǎn)Java學(xué)院整理

    Java避免死鎖_動力節(jié)點(diǎn)Java學(xué)院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術(shù)。對java避免死鎖的相關(guān)知識感興趣的朋友一起通過本文學(xué)習(xí)吧
    2017-06-06
  • Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼

    Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼

    這篇文章主要介紹了Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • java通過AOP實(shí)現(xiàn)全局日志打印詳解

    java通過AOP實(shí)現(xiàn)全局日志打印詳解

    最近自己一直再看現(xiàn)有微服務(wù)的日志模塊,發(fā)現(xiàn)就是使用AOP來做controller層的日志處理,加上項(xiàng)目在進(jìn)行架構(gòu)優(yōu)化,這篇文章主要給大家介紹了關(guān)于java通過AOP實(shí)現(xiàn)全局日志打印的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Spark調(diào)優(yōu)多線程并行處理任務(wù)實(shí)現(xiàn)方式

    Spark調(diào)優(yōu)多線程并行處理任務(wù)實(shí)現(xiàn)方式

    這篇文章主要介紹了Spark調(diào)優(yōu)多線程并行處理任務(wù)實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Java中map和flatMap的區(qū)別舉例詳解

    Java中map和flatMap的區(qū)別舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java中map和flatMap區(qū)別的相關(guān)資料,在Java中Stream接口有map()和flatmap()方法,兩者都有中間流操作,并返回另一個流作為方法輸出,需要的朋友可以參考下
    2023-10-10
  • java中TCP/UDP詳細(xì)總結(jié)

    java中TCP/UDP詳細(xì)總結(jié)

    本篇文章對Java中的TCP/UDP知識點(diǎn)進(jìn)行了歸納總結(jié)分析。需要的朋友參考下
    2017-04-04
  • springboot @validated List校驗(yàn)失效問題

    springboot @validated List校驗(yàn)失效問題

    這篇文章主要介紹了springboot @validated List校驗(yàn)失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringCloud微服務(wù)多應(yīng)用腳手架的搭建與部署方式

    SpringCloud微服務(wù)多應(yīng)用腳手架的搭建與部署方式

    這篇文章主要介紹了SpringCloud微服務(wù)多應(yīng)用腳手架的搭建與部署方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟

    SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot整合Ehcache3的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中獲取時間戳的三種方式對比實(shí)現(xiàn)

    Java中獲取時間戳的三種方式對比實(shí)現(xiàn)

    這篇文章主要介紹了Java中獲取時間戳的三種方式對比實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

沂源县| 宜兰市| 兖州市| 恭城| 浑源县| 黄陵县| 襄城县| 彭州市| 镇安县| 通江县| 临潭县| 庆云县| 义乌市| 南昌县| 林州市| 乌拉特前旗| 顺义区| 逊克县| 大厂| 赞皇县| 南汇区| 额敏县| 修武县| 茌平县| 盖州市| 道真| 桦川县| 宁陵县| 固始县| 尼玛县| 和平县| 万源市| 西吉县| 桐庐县| 镇宁| 库伦旗| 宝丰县| 井陉县| 霍城县| 宜都市| 卓尼县|