Spring 包掃描 @CompentScan註解的幾種用法

使用方法如下:

<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>


分享到:


相關文章: