亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

這個(gè)項(xiàng)目中的啟動(dòng)類(lèi)是:SpringbootApplication.java

該啟動(dòng)類(lèi)所在的目錄是:springboot

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

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

ComponentScan注解即可以?huà)呙璋?,也可以?huà)呙柚付ǖ念?lèi)。

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

1.ComponentScan注解掃描包

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

2.ComponentScan注解掃描類(lèi)。

@ComponentScan(basePackageClasses={XxxService.class})

三.ComponentScan注解

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

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

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

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

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

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

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

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

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

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

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

掃描具體的類(lèi)。

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

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;

處理檢測(cè)到的bean的scope范圍。

什么意思呢?

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

private String scopeName = "singleton";

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

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

6.ScopedProxyMode scopedProxy() default ScopedProxyMode. DEFAULT;

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

ScopedProxyMode是一個(gè)枚舉類(lèi),可選值有四個(gè):

  • DEFAULT
  • NO
  • INTERFACES
  • TARGET_CLASS

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

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

8.boolean useDefaultFilters() default true;

是否對(duì)含有以下注解的類(lèi)開(kāi)啟檢測(cè),默認(rèn)是開(kāi)啟的。

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

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

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

可選類(lèi)型有5種,定義在枚舉類(lèi)FilterType中:

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

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

排除過(guò)濾器掃描的的類(lèi)。

11.boolean lazyInit() default false;

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

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)部接口,主要是對(duì)Filter的封裝。

總結(jié)

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

相關(guān)文章

  • Mybatis緩存機(jī)制詳解與實(shí)例分析

    Mybatis緩存機(jī)制詳解與實(shí)例分析

    Mybatis的緩存分為一級(jí)緩存和二級(jí)緩存,一級(jí)緩存是SqlSession級(jí)別的而二級(jí)緩存是mapper級(jí)別的,本文詳細(xì)的介紹了Mybatis緩存機(jī)制與實(shí)例分析,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • Spring Boot中@ConditionalOnProperty的使用方法

    Spring Boot中@ConditionalOnProperty的使用方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot中@ConditionalOnProperty的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    這篇文章主要介紹了java學(xué)習(xí)之junit單元測(cè)試的相關(guān)資料,文中講解了JUnit單元測(cè)試的基本概念、作用、使用assert進(jìn)行驗(yàn)證、覆蓋率分析、BeforeEach和AfterAll的使用、通過(guò)反射和注解實(shí)現(xiàn)測(cè)試,需要的朋友可以參考下
    2024-12-12
  • 分析ZooKeeper分布式鎖的實(shí)現(xiàn)

    分析ZooKeeper分布式鎖的實(shí)現(xiàn)

    在分布式的情況下,sychornized 和 Lock 已經(jīng)不能滿(mǎn)足我們的要求了,那么就需要使用第三方的鎖了,這里我們就使用 ZooKeeper 來(lái)實(shí)現(xiàn)一個(gè)分布式鎖
    2021-06-06
  • java構(gòu)建Stream流的多種方式總結(jié)

    java構(gòu)建Stream流的多種方式總結(jié)

    Java?8引入了Stream流作為一項(xiàng)新的特性,它是用來(lái)處理集合數(shù)據(jù)的一種函數(shù)式編程方式,本文為大家整理了多種java構(gòu)建Stream流的方式,希望對(duì)大家有所幫助
    2023-11-11
  • Java8的default和static關(guān)鍵字的使用講解

    Java8的default和static關(guān)鍵字的使用講解

    今天小編就為大家分享一篇關(guān)于Java8的default和static關(guān)鍵字的使用講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Spring中@Configuration注解的使用場(chǎng)景

    Spring中@Configuration注解的使用場(chǎng)景

    這篇文章主要介紹了Spring中@Configuration注解的使用場(chǎng)景,@Configuration注解是從Spring?3.0版本開(kāi)始加入的一個(gè)使Spring能夠支持注解驅(qū)動(dòng)開(kāi)發(fā)的標(biāo)注型注解,主要用于標(biāo)注在類(lèi)上,需要的朋友可以參考下
    2023-11-11
  • Spring?Boot?DevTools?全局配置學(xué)習(xí)指南

    Spring?Boot?DevTools?全局配置學(xué)習(xí)指南

    這篇文章主要介紹了Spring?Boot?DevTools?全局配置,注意包括直接重啟項(xiàng)目與devtools重啟的區(qū)別,DevTools配置,DevTools全局配置及trigger-file控制重啟行為的相關(guān)知識(shí),需要的朋友可以參考下
    2022-03-03
  • 詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制

    詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制

    本篇文章主要介紹了詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Java中Arrays.asList()方法詳解及實(shí)例

    Java中Arrays.asList()方法詳解及實(shí)例

    這篇文章主要介紹了Java中Arrays.asList()方法將數(shù)組作為列表時(shí)的一些差異的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論