作用:@ComponentScan主要就是从指定的路径中找出标识了需要装配的类自动装配到spring的bean容器中。在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 context:component-scan跟包扫描仪。@ComponentScan注解默认装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。然后@SpringBootApplication注解里面包含了@ComponentScan注解
下面来看个例子
在包com.study.controller下新建一个UserController带@Controller注解如下
@Controller
public class UserController {
}
在包com.study.service下新建一个UserService带@Service注解如下
@Service
public class UserService {
}
在包com.study.dao下新建一个UserDao带@Repository注解如下
@Repository
public class UserDao {
}
配置类
@Configuration//代表此类是一个配置类
@ComponentScan(basePackages = "com.study")//扫描com.study下面并注册导Spring的容器当中
public class MySpring {
}
单元测试类
public class tests {
@Test
public void mains(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MySpring.class);
String[] definitionNames = applicationContext.getBeanDefinitionNames();//获取Spring容器中存活的Javabean
for (String name : definitionNames) {
System.out.println(name);
}
}
}
运行结果如下
mySpring
userController
userDao
userService
@ComponentScan详细配置
basePackages与value: 用于指定包的路径,进行扫描
basePackageClasses: 用于指定某个类的包的路径进行扫描
nameGenerator: bean的名称的生成器
useDefaultFilters: 是否开启对@Component,@Repository,@Service,@Controller的类进行检测
includeFilters: 包含的过滤条件(里面的都是枚举类型)
FilterType.ANNOTATION:按照注解过滤
FilterType.ASSIGNABLE_TYPE:按照给定的类型
FilterType.ASPECTJ:使用ASPECTJ表达式
FilterType.REGEX:正则
FilterType.CUSTOM:自定义规则
excludeFilters: 排除的过滤条件,用法和includeFilters一样
excludeFilters写法
写法1
@Configuration//代表此类是一个配置类
@ComponentScan(value= "com.study",excludeFilters ={
@ComponentScan.Filter(type= FilterType.ANNOTATION, classes = {Controller.class, Service.class})
})//扫描com.study下面并注册导Spring的容器当中
public class MySpring {
}
运行结果
mySpring
userDao
过滤掉@Controller和@Service这俩个注解
includeFilters写法
@Configuration//代表此类是一个配置类
//扫描com.study下面并注册导Spring的容器当中
@ComponentScan(value= "com.study",includeFilters ={
@ComponentScan.Filter(type= FilterType.ANNOTATION, classes = {Service.class})
},useDefaultFilters = false)//只扫描指定的注解
public class MySpring {
}
运行结果
mySpring
userService