成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring系列之@ComponentScan注解用法介紹

開發 架構
今天給大家分享Spring中@ComponentScan注解的用法,希望對大家能有所幫助!

今天給大家分享Spring中@ComponentScan注解的用法,希望對大家能有所幫助!

1、@ComponentScan注解的作用

@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定義包掃描的規則,然后根據定義的規則找出哪些需類需要自動裝配到spring的bean容器中,然后交由spring進行統一管理。說明:針對標注了@Controller、@Service、@Repository、@Component 的類都可以別spring掃描到。

2、@ComponentScan注解屬性介紹

2.1 value

指定要掃描的包路徑

2.2 excludeFilters(排除規則)

excludeFilters=Filter[] 指定包掃描的時候根據規則指定要排除的組件

2.3 includeFilters(包含規則)

includeFilters =Filter[] 指定包掃描的時候根據規則指定要包含的組件.注意:要設置useDefaultFilters = false(系統默認為true,需要手動設置) includeFilters包含過濾規則才會生效。

2.4 FilterType屬性

FilterType.ANNOTATION:按照注解過濾FilterType.ASSIGNABLE_TYPE:按照給定的類型,指定具體的類,子類也會被掃描到FilterType.ASPECTJ:使用ASPECTJ表達式FilterType.REGEX:正則FilterType.CUSTOM:自定義規則useDefaultFilters: 配置是否開啟可以對加@Component,@Repository,@Service,@Controller注解的類進行檢測, 針對Java8 語法可以指定多個@ComponentScan,Java8以下可以用 @ComponentScans() 配置多個規則

3、示例

3.1 各種過濾過濾規則示例



// 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() 配置多個規則
@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}
),

})

3.2 自定義過濾規則 需要新建 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 讀取到當前正在掃描的類信息
* metadataReaderFactory 可以獲取到其他任何類的信息
*/
public class TestTypeFilter implements TypeFilter {
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//獲取當前類注解信息
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
// 獲取當前正在掃描的類信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
// 獲取當前類資源信息(比如類的文件路徑)
Resource resource = metadataReader.getResource();
String className = classMetadata.getClassName();
System.out.println("類名:" + className);
if (className.contains("controller")) {
return true;
} else {
return false;
}
}
}

3.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);
}
}
}

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

責任編輯:姜華 來源: IT技術分享社區
相關推薦

2022-02-19 07:41:36

Bean注解項目

2022-03-03 07:34:31

注解容器作用域

2022-12-19 08:14:30

注解開發配置

2021-09-16 10:05:09

鴻蒙HarmonyOS應用

2016-09-23 10:34:32

JUnitGradleAgile

2016-09-21 14:17:11

JUnit架構API

2024-02-23 10:33:34

SpringBean容器

2023-08-04 08:25:03

客戶配置Spring

2021-07-09 07:52:34

SpringContextEventListen

2024-01-03 07:57:11

高級參數PowerShellVerbose 參數

2023-09-21 07:06:17

PSDriveProvider

2025-06-03 04:00:00

Spring框架配置

2022-05-30 11:17:44

Spring容器配置

2022-06-09 07:27:14

JavaSpring容器

2016-09-23 10:20:22

JUnit擴展模型Extension

2024-10-17 09:45:03

2021-05-06 18:17:52

SpringAOP理解

2021-05-07 21:32:51

SpringIOC分析

2020-11-05 11:30:46

PythonNumPy數組

2017-04-24 12:07:44

Spark大數據并行計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人jvid在线播放 | 欧美日韩国产精品一区 | 视频三区| 亚洲精品成人av久久 | 四虎在线播放 | 99久久免费精品视频 | 国产精品国产a级 | 狠狠干影院 | 亚洲一区二区三区免费观看 | 国产精品久久国产精品99 | 国产精品永久久久久久久www | 久久久久黄 | 精品乱码一区二区三四区 | 欧美激情久久久 | 一级看片免费视频囗交动图 | 亚洲视频免费在线播放 | 黑人精品欧美一区二区蜜桃 | 亚洲精品日本 | 国产a视频| 色综合99 | 亚洲精品成人 | 久久天天躁狠狠躁夜夜躁2014 | 国产日韩精品视频 | 国产精品自产拍 | 久久一日本道色综合久久 | 久久青青 | 国产精品久久久久久久岛一牛影视 | 国产一区久久久 | 国产精品日韩欧美 | 二区在线观看 | 精品乱人伦一区二区三区 | 亚洲国产精品视频一区 | 一区二区三区av | 成人国产精品免费观看 | 亚洲一区 中文字幕 | 欧美看片 | 国产十日韩十欧美 | 国产免国产免费 | 欧美日韩高清一区 | 亚洲在线免费 | 欧美一区二区三区在线免费观看 |