目录
一、介绍
1.什么是依赖自动装配?
2.为什么要用依赖自动装配?
3.自动装配类型
4.依赖自动装配特征
5.依赖自动装配的缺点
二、代码步骤(怎么用自动装配)
(一)按类型(byType)装配(推荐)
1.创建一个Dog类
2.创建一个Cat类
3.Dog类和Cat类统一交给spring管理(本文重点)
4.Test测试的java包里面创建一个包一个测试类去测试运行
5.运行结果(Cat类被注入了Dog类的方法)
(二)按名称(byName)装配
总结:
答:IOC容器根据bean所依赖的资源在容器中自动查找并注入bean中的过程中称为自动装配
这是IOC容器的文章
spring的控制反转(IOC)与依赖注入实现方式(DI)_云边的快乐猫的博客-CSDN博客
答:因为用set注入和构造器注入要在xml文件里面进行繁琐的bean标签设置。于是就需要简化这个过程步骤,那么自动装配就可以帮我们简化这个xml文件的配置。
ps:自动装配是基于set注入和构造器注入的基础上简化
这是set注入和构造器注入的文章spring的注入(set注入、构造器注入)_云边的快乐猫的博客-CSDN博客
(1)按类型:byType(常用)
(2)按名称:byName(少用)
(3)按构造方法(几乎不用)
(4)不启用自动装配2
(1)自动装配用于引用类型依赖注入,不能对简单类型进行操作
(2)使用按类型装配时(byType)必须保障容器中相同类型的bean唯一。(推荐使用)
(3)使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因为变量名与配置耦合,所以(不推荐使用)
(4)自动装配优先级低于setter注入和构造器注入,如果同时出现,自动装配配置失效
(1)正常情况下,项目开发很少会用自动装配,对比起来明确清晰的配置文档没有优势
(2)只能根据类型或者名称自动装配,不能同时使用
(3)自动装配会默认装配bean里面的所有属性,想要装配单一的属性时候,就显得不够灵活
ps:修改xml文件里面的bean标签就好了,其他的不用动
实验目标:创建一个Dog类,一个Cat类,交给spring中心托管。然后把Dog类的方法注入到Cat类里面,让Cat类去调用。本项目用的是maven项目
package com.spring6.bean;
public class Dog {
//1.新建一个方法
public void DogEat(){
System.out.println("这是狗的方法");
}
}
ps:被注入的Cat类里面要先写入要注入目标的私有对象.类.方法。然后生成一个set方法
然后类本身创建一个方法,去调用这个注入的对象方法
package com.spring6.bean;
public class Cat {
//一、要注入Cat里面的方法
//1.Dog私有方法
private Dog DogEat;
//2.生成一个set方法
public void setDog(Dog dog) {
this.DogEat = dog;
}
//二、写Cat自己的方法
public void cat(){
//3.调用注入狗的方法
DogEat.DogEat();
}
}
步骤:在resources里面创建一个配置xml文件。然后写入Dog和Cat这两个类的spring管理方式。
ps:注入类:Dog。被注入类:Cat。就像Cat类里面被针管容器注入Dog类的方法
快速入门使用spring详细步骤(介绍、导入依赖、第一个简单程序)_云边的快乐猫的博客-CSDN博客
没有使用自动装配的xml文件
使用自动装配后的xml文件
ps:区别就是在bean标签里面不用写那么多,只需要在被注入的bean标签里面加入autowire="byType就好了
package com.spring6.text;
import com.spring6.bean.Cat;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class springTText {
@Test
public void TT(){
//1.半固定写法,扫描spring的xml文件(不固定的是要扫描的是哪个xml文件)
ApplicationContext applicationContext =new ClassPathXmlApplicationContext("spring.xml");
//2.半固定写法,获取spring里面要进行运行的类(不固定的是括号里面的,name为:要运行类的id,后面跟着的是要运行的类.class)
Cat catBean = applicationContext.getBean("catBean", Cat.class);
//3.上面自定义名.要运行类的方法
catBean.cat();
}
}
这个用的很少,就不写了
和set和构造器注入差别不大,唯一要修改的就是xml文件里面的被注入的bean文件里面不用写那么多繁琐的,把很多繁琐的都剔除改为autowire="byType或者autowire="byName。但是该有的bean标签的id和class还是必须要有的。