Spring IoC 注解实现概述
知识回顾:
- xml 配置文件方式实现 IoC,本质上是在 xml 中定义 bean,告诉 Spring 要创建哪些 bean,以及 bean 的属性如何注入。
注解方式实现 IoC:
- 用注解标记 bean。
- 用注解标记 bean 的属性如何注入。
- Spring 扫描代码里的注解,创建 bean,完成依赖注入。
注解方式实现 IoC 的步骤
第一步:引入 spring-context 依赖
不要选择 6.x 的版本,Spring6 不支持 JDK 8,选择 5.x 的版本。
第二步:定义类
第三步:使用注解进行标注
第四步:配置 Spring 扫描路径
第五步:从 Spring IoC 容器中获取 bean
标记 bean 的注解 @Component、@Service、@Controller、@Repository
- @Component 注解: Spring 扫描到装饰有 @Component 注解的类,会给这个类创建 bean 并放入 Spring IoC 容器。
- @Component 注解的 value 是 bean 的 id,如果没有配置 value,那么取类名首字母小写为 bean id。
- @Service、@Controller、@Repository: 这三个注解上都有 @Component,这三个注解的作用跟 @Component 是一样的。
- 区别在于这三个注解用于装饰不同层的类。 @Controller 装饰 Controller 层, @Service 用于装饰 Service层, @Repository 用于装饰 Dao 层。
- 如果只看实际效果的话, @Component 、@Service、@Controller、@Repository 是一样的。
实现注入的注解 - @Value
@Value 用于注入简单类型的属性。可以作用在字段、方法(set方法)、参数(构造方法的参数)上。
- @Value 作用在字段上
- @Value 作用在 set 方法上
- @Value 作用在构造方法的参数上
实现注入的注解 - @Autowired
@Autowired 用于注入 bean 类型的属性。可以作用在字段、set方法、构造方法的参数、构造方法上。
- @ Autowired 作用在字段上
- @ Autowired 作用在 set 方法上
- @ Autowired 作用在构造方法上
- @ Autowired 作用在构造方法的参数上
- @Autowired 优先根据类型装配。
- 先按照属性的类型寻找 bean,如果该类型只找到一个bean,直接装配
- 如果该类型找到多个bean,再在这些类型匹配的 bean 之中找与属性名称匹配的,找到则装配
- 在多个类型匹配的 bean 中找不到名称匹配的,装配失败,抛异常。
- @Autowired 可配合 @Qualifier 使用, @Qualifier 用于指定使用装配 bean 的名称
实现注入的注解 - @Resource
- @Resource 优先根据名称装配。名称是 @Resource 的 name,如果不配置 name,以属性名为名称。
- 先按名称寻找 bean,找到则检查类型是否匹配,类型匹配注入,类型不匹配抛异常
- 按照名称找不到 bean,按属性的类型寻找,若按类型只找到一个 bean 则装配,按类型找到多个则抛异常。
IoC 全注解式编程
用 Java 类替换 spring xml 配置文件
使用 AnnotationConfigApplicationContext
使用 Spring IoC 优化 Spring IoC 启示录代码
Service 层
Dao 层
工具类
Controller 层
Controller 层使用 SpringMVC,Dao 层用 Spring 集成 MyBatis,可以使代码将更加优雅。