使用方法如下:
<code>@Configuration
@ComponentScan(basePackages = {"com.yj.testcompentscan"})
public class MainConfig {
}/<code>
①:排除用法 excludeFilters(排除@Controller註解的,和XxService的)
<code>@Configuration
@ComponentScan(basePackages = {"com.yaspeed.testcompentscan"},excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class}),
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = {和XxService的.class})
})
public class MainConfig {
}
/<code>
②:包含用法 includeFilters ,注意,若使用包含的用法, 需要把useDefaultFilters屬性設置為false(true表
示掃描全部的)
<code>@Configuration
@ComponentScan(basePackages = {"com.tuling.testcompentscan"},includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class, Service.class})
},useDefaultFilters = false)
public class MainConfig {
}/<code>
③ @ComponentScan.Filter type的類型
a)註解形式的FilterType.ANNOTATION
<code> @Controller @Service @Repository @Compent/<code>
b)指定類型的 FilterType.ASSIGNABLE_TYPE
<code> @ComponentScan.Filter(type =
FilterType.ASSIGNABLE_TYPE,value = {TulingService.class})/<code>
c)aspectj類型的 FilterType.ASPECTJ(不常用)
d)正則表達式的 FilterType.REGEX(不常用)
e)自定義的 FilterType.CUSTOM
<code>public enum FilterType {
//註解形式 比如@Controller @Service @Repository @Compent
ANNOTATION,
//指定的類型
ASSIGNABLE_TYPE,
//aspectJ形式的
ASPECTJ,
//正則表達式的
REGEX,
//自定義的
CUSTOM
}/<code>
③.① FilterType.CUSTOM 自定義類型如何使用
<code>public class YjFilterType implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//獲取當前類的註解源信息
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
//獲取當前類的class的源信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
//獲取當前類的資源信息
Resource resource = metadataReader.getResource();
if(classMetadata.getClassName().contains("dao")) {
return true;
}
return false;
}
}/<code>
<code>@ComponentScan(basePackages = {"com.tuling.testcompentscan"},includeFilters = {
@ComponentScan.Filter(type = FilterType.CUSTOM,value = TulingFilterType.class)
},useDefaultFilters = false)
public class MainConfig {
}/<code>
閱讀更多 碼農的一天 的文章