一. 用法:在resources资源包下的applicationContext.xml主配置文件中添加:
<!-- 声明组件扫描器 context前缀 component-scan标签(英文组件扫描的意思) -->
<context:component-scan base-package="com.heyu.pojo"/>
二. component-scan工作方式
组件扫描器是建立在有注解的基础上的
- 声明组件扫描器(component-scan),组件就是java对象
- spring会扫描遍历base-package指定的包,把包中和子包中的所有类,找到类中的注解,按照注解的功能创建对象,或给属性赋值
此时,spring主配置文件会自动添加三行代码:
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
三. 主配置文件头部配置文件讲解
spring框架很大,其中有很多不同的标签,为了避免标签重名,将标签放在不同的约束文件之中(如:spring-context.xsd)。
<!-- 命名空间前缀,用前缀可以表示命名空间 -->
xmlns:context="http://www.springframework.org/schema/context"
<!-- 命名空间,别名的意思 -->
http://www.springframework.org/schema/context
<!-- 约束文件的url -->
https://www.springframework.org/schema/context/spring-context.xsd
三. 组件扫描器读取流程:
@Test
public void test01(){
String config = "applicationContext.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
Student stu = (Student)ctx.getBean("student");
System.out.println("student=" + stu);
}
- 通过读取主配置文件创建spring容器对象
- 从上至下读取,主配置文件中只添加了组件扫描器一个内容,组件扫描器遍历com.heyu.pojo包
- 找到实体类中的注解,根据注解进行创建对象或赋值
- 用spring容器对象调用getBean()方法,取出对象
- 控制台打印
四. 遗留问题:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
spring依赖不加和加都能得出结果,为什么要加?这个依赖的具体用法是什么?