文章目录
- 一、手动装配
- 二、自动装配
- 1. XML 方式
- 2. 注解方式
一、手动装配
首先知道 Spring 装配是干了件啥事?我的理解,它就是用来解决 bean 之间依赖关系的一个手段。
比如说我这里有一个 People 类和一个 Dog 类,People 依赖 Dog,也就是说一个人拥有一只狗,人和狗之间是存在依赖关系的,我们都知道 IOC容器就负责管理对象的创建及依赖关系的维护,那么狗和人之间的依赖关系自然就交给 Spring 容器来管理了,而这个依赖关系是需要装配的。
本篇主要讲解的是自动装配,但是在说自动装配之前,我们先来看一下手动装配是怎么装配的,通过对比,你就知道自动装配有多 yyds 了!
① 实体类准备,一个 People 类和一个 Dog 类
② 编写核心配置文件,并手动装配 bean 依赖关系
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dog" class="com.zxe.pojo.Dog"/><bean id="people" class="com.zxe.pojo.People"><property name="name" value="栈老师"/><property name="dog" ref="dog"/></bean></beans>
可以看到,手动装配的 dog 依赖,是用 ref 引用的!
二、自动装配
1. XML 方式
这种方式主要就是用到了 autowire 属性,属性值有 byName 和 byType 两种。接下来以 byName 为例,实体类还是上面的 People 和 Dog。
① 以 byName 方式装配
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dog" class="com.zxe.pojo.Dog"/><bean id="people" class="com.zxe.pojo.People" autowire="byName"><property name="name" value="栈老师"/></bean></beans>
这里需要进一步说明一下 byName 和 byType 的区别:
① byName,顾名思义是通过名字去装配的,在 People 中注入一个 Dog,需要将 setDog 方法名里面的 dog 拿出来到核心配置里面找,找什么呢?找 id 名为 dog 的 bean,找到了之后自动注入,注意从实体类里面拿到的这个 dog 一定是 set 后面的内容,并不是变量名
;
② byType,它是通过类型装配的,将 People 里的 Dog 类型拿出来,到配置文件里找 class 为 Dog 的 bean,然后自动注入,bean 的类型肯定就不能一样了,否则无法找到
。
2. 注解方式
还有一种最常用的装配方式就是注解装配,它是通过反射来实现的。
① 开启注解支持,<context:annotation-config/>
<?xml version="1.0" encoding="UTF-8"?>
<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="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/><bean id="dog" class="com.zxe.pojo.Dog"/><bean id="people" class="com.zxe.pojo.People"><property name="name" value="栈老师"/></bean></beans>
② 使用 @Autowired 注解标注依赖属性
注解方法装配属性的过程, @Autowired 默认会优先根据属性的类型去容器中找对应的组件,找到就赋值,如果找到了多个相同类型的组件,我们可以组合使用@Autowired与@Qualifier,@Qualifier 是根据名称来查找的。