Spring注解驱动开发[email protected]自动扫描组件&指定扫描规则
一、用xml方式也可以开启自动包扫描
<!-- 包扫描、只要标注了@Controller、@Service、@Repository,@Component -->
<context:component-scan base-package="组件所在包的名字" use-default-filters="false"></context:component-scan>
二、用@ComponentScan注解开启包扫描
@Configuration
@ComponentScan(value = "com.edward.bean")
public class MainConfig {
@Bean("person1")
public Person person(){
return new Person("李四",43);
}
}
@ComponentScan value:指定要扫描的包
com.edward包下所有的组件
测试:
@Test
public void test03(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String name : beanDefinitionNames){
System.out.println(name);
}
}
三、扫描的规则
1. excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件
@Configuration
@ComponentScan(value = "com.edward",excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
})
public class MainConfig {
@Bean("person1")
public Person person(){
return new Person("李四",43);
}
}
没有Controller
2. includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件
@Configuration
@ComponentScan(value = "com.edward",includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
},useDefaultFilters = false)
public class MainConfig {
}
useDefaultFilters = false,去掉默认的规则
只用Controller注解的组件
FilterType.ANNOTATION:按照注解
FilterType.ASSIGNABLE_TYPE:按照给定的类型;
FilterType.ASPECTJ:使用ASPECTJ表达式
FilterType.REGEX:使用正则指定
FilterType.CUSTOM:使用自定义规则