Spring boot引入配置文件

@SpringBootApplication注解标注的类会默认以这个类为根目录扫描下面的所有带注解的类。那么如果我们的类不想放在这个@SpringBootApplication注解标注的类为根目录的类下面,而是放到其他路径中,Spring boot默认是扫描不到的,这个时候就需要我们另外引入那些类才可以。Spring boot提供了2个注解给我们@Import和@ComponentScan

@Import源代码如下,可以看到我们传递Class数组,可以传递多个配置类,用在@SpringBootApplication注解的类中即可

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
    Class<?>[] value();
}

那么对于@Import需要每个配置类都手动添加,所以可以使用@ComponentScan注解定义扫描规则,扫描指定的包路径下的所有文件。
@ComponentScan源代码如下,可以看到除了指定扫描包之外,我们还可以另外定义其他属性。例如:resourcePattern定义规则。includeFilters定义包含过滤器。excludeFilters定义不用包含的文件过滤器等。
 

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

关注微信公众号(程序员小兔)不定期分享技术

发布了222 篇原创文章 · 获赞 189 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/sinat_32366329/article/details/84070159