@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 {};     } }

相关文章
相关标签/搜索