案例已上传GitHub,欢迎star:https://github.com/oneStarLR/spring-annotation
一、注解用法
1. 背景知识
什么是组件?
组件也是抽象的概念,可以理解为一些符合某种规范的类组合在一起就构成了组件,他可以提供某些特定的功能,但实际他们都是类,只不过有他们特殊的规定。组件和类的关系:符合某种规范的类的组合构成组件。
2. @ComponentScan注解作用
1. 将组件自动加载到容器
加了包扫描@ComponentScan注解后,只要标注了@Controller、@Service、@Repository、@Component注解中的任何一个,其组件都会被自动扫描,加入到容器中。
2. 通过属性指定扫描
【1】value
:指定要扫描的包
【2】excludeFilters=Filter[ ]
:设置排除的过滤条件,指定扫描的时候按照什么规则排除哪些组件,不扫描哪些包
【3】includeFilters=filter[ ]
:设置扫描过滤条件,指定扫描的时候按照什么规则包含哪些组件,满足该条件才进行扫描
【4】自定义过滤规则
:通过实现TypeFilter接口,自定义过滤规则
下面咱们通过实例来分析一下@ComponentScan注解的作用
二、实例分析
以maven项目为例,通过@ComponentScan、@Controller、@Service、@Repository注解获取容器中的对象:
// 启动类
@Test
public void TestMain(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
String[] beanNames = applicationContext.getBeanDefinitionNames();
for(String beanName : beanNames){
System.out.println(“容器中对象名称:”+beanName);
}
}
// 配置类
@Configuration
@ComponentScan(value = “com.onestar”)
public class AppConfig {
}
// 控制层
@Controller
public class UserController {
}
// 业务层
@Service
public class UserService {
}
// 持久层
@Repository
public class UserDao {
}
运行测试类,可以看到如下打印信息,除了spring启动时注入到容器的对象外,还有我们自己加了注解,被spring扫描,加入到容器中
@ComponentScan(value = "com.onestar")
:value表示指定要扫描的包
点进@ComponentScan注解源码,我们可以看到,使用value可以指定要扫描的包,我们还可以排除要扫描的包,包含要扫描的包,甚至还可以自定义过滤规则
-
excludeFi