SpringFramework实战指南(五)
- 4.3 基于 注解 方式管理 Bean
- 4.3.1 实验一: Bean注解标记和扫描 (IoC)
- 4.3.2 实验二: 组件(Bean)作用域和周期方法注解
- 4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)
- 4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)
- 4.3.5 实验五: 基于注解+XML方式整合三层架构组件
4.3 基于 注解 方式管理 Bean
4.3.1 实验一: Bean注解标记和扫描 (IoC)
注解理解
和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。
本质上:所有一切的操作都是 Java 代码来完成的,XML 和注解只是告诉框架中的 Java 代码如何执行。
举例:元旦联欢会要布置教室,蓝色的地方贴上元旦快乐四个字,红色的地方贴上拉花,黄色的地方贴上气球。
班长做了所有标记,同学们来完成具体工作。墙上的标记相当于我们在代码中使用的注解,后面同学们做的工作,相当于框架的具体操作。
扫描理解
Spring 为了知道程序员在哪些地方标记了什么注解,就需要通过扫描的方式,来进行检测。然后根据注解进行后续操作。
准备Spring项目和组件
- 准备项目pom.xml
org.springframeworkspring-context6.0.6org.junit.jupiterjunit-jupiter-api5.3.1
2. 准备组件类普通组件
/** * projectName: com.atguigu.components * * description: 普通的组件 */public class CommonComponent {}
Controller组件
/** * projectName: com.atguigu.components * * description: controller类型组件 */public class XxxController {}
Service组件
/** * projectName: com.atguigu.components * * description: service类型组件 */public class XxxService {}
Dao组件
/** * projectName: com.atguigu.components * * description: dao类型组件 */public class XxxDao {}
- 组件添加标记注解
组件标记注解和区别
Spring 提供了以下多个注解,这些注解可以直接标注在 Java 类上,将它们定义成 Spring Bean。
注解 | 说明 |
---|---|
@Component | 该注解用于描述 Spring 中的 Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如 Service 层、Dao 层等。 使用时只需将该注解标注在相应类上即可。 |
@Repository | 该注解用于将数据访问层(Dao 层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Service | 该注解通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Controller | 该注解通常作用在控制层(如SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
![](http://heavy_code_industry.gitee.io/code_heavy_industry/assets/img/img017.93fb56c5.png)通过查看源码我们得知,@Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字。对于Spring使用IOC容器管理这些组件来说没有区别,也就是语法层面没有区别。所以@Controller、@Service、@Repository这三个注解只是给开发人员看的,让我们能够便于分辨组件的作用。注意:虽然它们本质上一样,但是为了代码的可读性、程序结构严谨!我们肯定不能随便胡乱标记。2. 使用注解标记普通组件
/** * projectName: com.atguigu.components * * description: 普通的组件 */@Componentpublic class CommonComponent {}
Controller组件
/** * projectName: com.atguigu.components * * description: controller类型组件 */@Controllerpublic class XxxController {}
Service组件
/** * projectName: com.atguigu.components * * description: service类型组件 */@Servicepublic class XxxService {}
Dao组件
/** * projectName: com.atguigu.components * * description: dao类型组件 */@Repositorypublic class XxxDao {}
配置文件确定扫描范围
情况1:基本扫描配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="