欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.ComponentScan注解的默認掃描范圍

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

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

這個項目中的啟動類是:SpringbootApplication.java

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

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

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

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

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

1.ComponentScan注解掃描包

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

2.ComponentScan注解掃描類。

@ComponentScan(basePackageClasses={XxxService.class})

三.ComponentScan注解

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

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

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

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

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

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

關于basePackages屬性,下面會講到。

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

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

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

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

掃描具體的類。

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

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

配置beanName生成器,默認是BeanNameGenerator。

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

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

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

什么意思呢?

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

private String scopeName = "singleton";

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

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

6.ScopedProxyMode scopedProxy() default ScopedProxyMode. DEFAULT;

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

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

  • DEFAULT
  • NO
  • INTERFACES
  • TARGET_CLASS

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

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

8.boolean useDefaultFilters() default true;

是否對含有以下注解的類開啟檢測,默認是開啟的。

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

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

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

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

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

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

排除過濾器掃描的的類。

11.boolean lazyInit() default false;

掃描到的類是否開啟懶加載,默認不開啟。

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

總結

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

相關文章

  • Mybatis緩存機制詳解與實例分析

    Mybatis緩存機制詳解與實例分析

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

    Spring Boot中@ConditionalOnProperty的使用方法

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

    java學習之junit單元測試案例(經(jīng)典版)

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

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

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

    java構建Stream流的多種方式總結

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

    Java8的default和static關鍵字的使用講解

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

    Spring中@Configuration注解的使用場景

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

    Spring?Boot?DevTools?全局配置學習指南

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

    詳解Spring mvc DispatchServlet 實現(xiàn)機制

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

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

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

最新評論