@ComponentScan
注解和 @Configuration
注解结合使用,默认是用来扫描指定包下的被@Compoent
注解的类。@ComponentScan
注解有一些属性,如下所示。
@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 {
};
}
}
无参使用方法
@Configuration
@ComponentScan
public class SpringComponentScanApp {
private static ApplicationContext applicationContext;
@Bean
public ExampleBean exampleBean() {
return new ExampleBean();
}
public static void main(String[] args) {
applicationContext =
new AnnotationConfigApplicationContext(SpringComponentScanApp.class);
for (String beanName : applicationContext.getBeanDefinitionNames()) {
System.out.println(beanName);
}
}
}
指定Filter
ComponentScan.Filter
有5中可用类型:
- ANNOTATION
- ASSIGABLE_TYPE
- ASPECTJ
- REGEX
- CUSTOM
使用自定义注解。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.<