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

Spring的@ComponentScan注解用法介紹

 更新時間:2023年11月24日 10:02:02   作者:IT技術(shù)分享社區(qū)  
這篇文章主要介紹了Spring的@ComponentScan注解用法介紹,@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定義包掃描的規(guī)則,然后根據(jù)定義的規(guī)則找出哪些需類需要自動裝配到spring的bean容器中,然后交由spring進(jìn)行統(tǒng)一管理,需要的朋友可以參考下

1、@ComponentScan注解的作用

@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定義包掃描的規(guī)則,然后根據(jù)定義的規(guī)則找出哪些需類需要自動裝配到spring的bean容器中,然后交由spring進(jìn)行統(tǒng)一管理。

說明:針對標(biāo)注了@Controller、@Service、@Repository、@Component 的類都可以別spring掃描到。

2、@ComponentScan注解屬性介紹

1 value

指定要掃描的包路徑

2 excludeFilters(排除規(guī)則)

excludeFilters=Filter[] 指定包掃描的時候根據(jù)規(guī)則指定要排除的組件

3 includeFilters(包含規(guī)則)

includeFilters =Filter[] 指定包掃描的時候根據(jù)規(guī)則指定要包含的組件.

注意:要設(shè)置useDefaultFilters = false(系統(tǒng)默認(rèn)為true,需要手動設(shè)置) includeFilters包含過濾規(guī)則才會生效。

4 FilterType屬性

  • FilterType.ANNOTATION:按照注解過濾
  • FilterType.ASSIGNABLE_TYPE:按照給定的類型,指定具體的類,子類也會被掃描到
  • FilterType.ASPECTJ:使用ASPECTJ表達(dá)式
  • FilterType.REGEX:正則
  • FilterType.CUSTOM:自定義規(guī)則

useDefaultFilters: 配置是否開啟可以對加@Component,@Repository,@Service,@Controller注解的類進(jìn)行檢測, 針對Java8 語法可以指定多個@ComponentScan,Java8以下可以用 @ComponentScans() 配置多個規(guī)則

3、示例

1 各種過濾過濾規(guī)則示例

// includeFilters 用法 包含Animal.class類可以被掃描到,包括其子類
@ComponentScan(value = "com.spring"
  includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {Animal.class}
)}
)
// excludeFilters 用法 排除包含@Controller注解的類
@ComponentScan(value = "com.spring"
        , excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION
                , classes = {Controller.class}
        ),
})
// ComponentScans用法
@ComponentScans(
        value = {
                @ComponentScan(value = "com.spring"
                        , includeFilters = {
                        @ComponentScan.Filter(type = FilterType.ANNOTATION
                                , classes = {Controller.class}
                        )
                }, useDefaultFilters = false) ,
                @ComponentScan(value = "com.spring"
                        , excludeFilters = {
                        @ComponentScan.Filter(type = FilterType.ANNOTATION
                                , classes = { Repository.class}
                        )
                })
        }
)*/
// @ComponentScan 
// 針對Java8 語法可以指定多個@ComponentScan,Java8以下可以用 //@ComponentScans() 配置多個規(guī)則
@ComponentScan(value = "com.spring"
        , excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION
                , classes = {Controller.class, Controller.class}
        ),
}, includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION
                , classes = {Controller.class, Controller.class}
        ),
})

2 自定義過濾規(guī)則 需要新建 TestTypeFilter.java

package com.spring.config;
import org.springframework.core.io.Resource;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
import java.io.IOException;
/**
 * metadataReader 讀取到當(dāng)前正在掃描的類信息
 * metadataReaderFactory 可以獲取到其他任何類的信息
 */
public class TestTypeFilter implements TypeFilter {
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //獲取當(dāng)前類注解信息
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        // 獲取當(dāng)前正在掃描的類信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        // 獲取當(dāng)前類資源信息(比如類的文件路徑)
        Resource resource = metadataReader.getResource();
        String className = classMetadata.getClassName();
        System.out.println("類名:" + className);
        if (className.contains("controller")) {
            return true;
        } else {
            return false;
        }
    }
}

3 新建測試類  TestComponentScan.java

package com.spring.test;
import com.spring.config.TestComponentScanConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestComponentScan {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestComponentScanConfig.class);
        String[] names = annotationContext.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
    }
}

具體的運行效果可以查看控制臺輸出結(jié)果,是否和預(yù)期的一樣,具體有不清楚的歡迎溝通交流。

到此這篇關(guān)于Spring的@ComponentScan注解用法介紹的文章就介紹到這了,更多相關(guān)@ComponentScan注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java BeanMap實現(xiàn)Bean與Map的相互轉(zhuǎn)換

    Java BeanMap實現(xiàn)Bean與Map的相互轉(zhuǎn)換

    這篇文章主要介紹了利用BeanMap進(jìn)行對象與Map的相互轉(zhuǎn)換,通過net.sf.cglib.beans.BeanMap類中的方法來轉(zhuǎn)換,效率極高,本文給大家分享實現(xiàn)代碼,感興趣的朋友一起看看吧
    2022-11-11
  • ssm項目實現(xiàn)用戶登陸持久化(token)

    ssm項目實現(xiàn)用戶登陸持久化(token)

    這篇文章主要介紹了ssm項目實現(xiàn)用戶登陸持久化(token),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 詳解Java中的ReentrantLock鎖

    詳解Java中的ReentrantLock鎖

    這篇文章主要介紹了Java中ReentrantLock鎖的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Java農(nóng)夫過河問題的繼承與多態(tài)實現(xiàn)詳解

    Java農(nóng)夫過河問題的繼承與多態(tài)實現(xiàn)詳解

    這篇文章主要介紹了Java農(nóng)夫過河問題的繼承與多態(tài)實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • java ant包中的org.apache.tools.zip實現(xiàn)壓縮和解壓縮實例詳解

    java ant包中的org.apache.tools.zip實現(xiàn)壓縮和解壓縮實例詳解

    這篇文章主要介紹了java ant包中的org.apache.tools.zip實現(xiàn)壓縮和解壓縮實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    這篇文章將通過Java實現(xiàn)一個簡答的圖書管理系統(tǒng),本圖書管理系統(tǒng)用對象數(shù)組的方式來提供操作方法,比較特別,建議新手學(xué)習(xí),這對理解Java面向?qū)ο笥泻艽髱椭?/div> 2022-11-11
  • Java內(nèi)存區(qū)域和內(nèi)存模型講解

    Java內(nèi)存區(qū)域和內(nèi)存模型講解

    今天小編就為大家分享一篇關(guān)于Java內(nèi)存區(qū)域和內(nèi)存模型講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Spring?Boot常用注解(經(jīng)典干貨)

    Spring?Boot常用注解(經(jīng)典干貨)

    Spring?Boot是一個快速開發(fā)框架,快速的將一些常用的第三方依賴整合,全部采用注解形式,內(nèi)置Http服務(wù)器,最終以Java應(yīng)用程序進(jìn)行執(zhí)行,這篇文章主要介紹了Spring?Boot常用注解(絕對經(jīng)典),需要的朋友可以參考下
    2023-01-01
  • Java并發(fā)內(nèi)存模型詳情

    Java并發(fā)內(nèi)存模型詳情

    這篇文章主要介紹了Java并發(fā)內(nèi)存模型,Java是一門支持多線程執(zhí)行的語言,要編寫正確的并發(fā)程序,了解Java內(nèi)存模型是重要前提。而了解硬件內(nèi)存模型有助于理解程序的執(zhí)行,下面文章就來看看詳細(xì)內(nèi)容吧
    2021-10-10
  • JavaMe開發(fā)自適應(yīng)滾動顯示

    JavaMe開發(fā)自適應(yīng)滾動顯示

    我們??吹揭恍L動顯示的實例,比如UC瀏覽器中,顯示網(wǎng)頁的內(nèi)容。當(dāng)內(nèi)容比較多時,采用滾動分頁顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截斷了。如何實現(xiàn)滾動分頁顯示呢?
    2015-09-09

最新評論