一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring系列之@ComponentScan注解用法介紹

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

2022-02-24 21:45IT技術分享社區郝光明 Java教程

今天給大家分享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);
        }
    }
}

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

原文地址:https://mp.weixin.qq.com/s/JeCIW87jn1heBHv7jadE2w

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产在线精品一区二区高清不卡 | 万域之王动漫在线观看全集免费播放 | 天天综合天天综合色在线 | 精品国产人妻国语 | 日韩欧美天堂 | 果冻传媒天美传媒在线小视频播放 | 99精品热| 波多野结衣52部合集在线观看 | 激情综合色啪啪小说 | 操弄哥哥的108种姿势 | 免费看国产一级特黄aa大片 | 日韩在线观看免费 | 久久er国产免费精品 | 亚洲欧美成人中文在线网站 | 男人女人日皮 | 精品一二三区久久AAA片 | 日韩中文字幕视频在线观看 | 日产2021免费一二三四区 | 12345国产精品高清在线 | 欧美高清在线精品一区二区不卡 | 星星动漫在线观看免费 | 贵妇的私人性俱乐部 | 欧美日韩国产另类一区二区三区 | a级黄色视屏| 99视频精品全部免费观看 | 国产探花在线观看 | caoporn超碰最新地址进入 | 波多野结衣中文字幕乱七八糟 | 成人免费在线视频观看 | 日韩成人在线网站 | 欧美乱码视频 | 免费视频精品一区二区三区 | 99在线资源 | piss美女厕所小便 | 亚洲国产日韩制服在线观看 | 免费一区在线观看 | 大陆男男gayxxxxvideo | 亚洲成年人免费网站 | 成年看片免费高清观看 | 校花小雪灌满了男人们的浓浆 | 人人福利 |