Spring boot引入配置檔案
阿新 • • 發佈:2019-02-05
@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 {}; } }