@ComponentScan的使用原理

@ComponentScan就是根據配置的掃描路徑,把符合掃描規則的類裝配到spring容器中。如:https://blog.51cto.com/1754966750/1947226spring

注意:詳細瞭解註解的原理看源碼。.net

(1)、backPackages和value用於指定掃描包的路徑。blog

(2)、basePackages:用於指定某個類的包的路徑進行掃描。接口

(3)、nameGenerator:bean的名稱生成器。get

(4)、useDefaulterFilters:是否開啓對@Componest,@Repository,@Service,@Controller這些類的檢測,這裏須要注意的是@Repository註解的含義,而且不少的時候都不會用到?由於這四種註解沒有什麼本質的區別,做用都是聲明做用,取不一樣的名字只是爲了區分不一樣的功能,源碼

 爲何咱們不用@Respository來註解接口,可是照樣能夠注入到這個接口的實現類,能夠利用@AutoWried.it

(5)、includeFilters: 包含的過濾條件io

       FilterType.ANNOTATION:按照註解過濾table

       FilterType.ASSIGNABLE_TYPE:按照給定的類型class

       FilterType.ASPECTJ:使用ASPECTJ表達式

       FilterType.REGEX:正則

       FilterType.CUSTOM:自定義規則

       excludeFilters: 排除的過濾條件,用法和includeFilters同樣

@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan {     @AliasFor("basePackages")     String[] value() default {};       @AliasFor("value")     String[] basePackages() default {};       Class<?>[] basePackageClasses() default {};       Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;       Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;       ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;       String resourcePattern() default "**/*.class";     boolean useDefaultFilters() default true;     ComponentScan.Filter[] includeFilters() default {};     ComponentScan.Filter[] excludeFilters() default {};     boolean lazyInit() default false;     @Retention(RetentionPolicy.RUNTIME)     @Target({})     public @interface Filter {         FilterType type() default FilterType.ANNOTATION;         @AliasFor("classes")         Class<?>[] value() default {};         @AliasFor("value")         Class<?>[] classes() default {};         String[] pattern() default {};     } }

相關文章
相關標籤/搜索