目录
4.Test测试的java包里面创建一个包一个测试类去测试运行
一、介绍
1.什么是依赖自动装配?
答:IOC容器根据bean所依赖的资源在容器中自动查找并注入bean中的过程中称为自动装配
这是IOC容器的文章
2.为什么要用依赖自动装配?
答:因为用set注入和构造器注入要在xml文件里面进行繁琐的bean标签设置。于是就需要简化这个过程步骤,那么自动装配就可以帮我们简化这个xml文件的配置。
ps:自动装配是基于set注入和构造器注入的基础上简化
这是set注入和构造器注入的文章spring的注入(set注入、构造器注入)_云边的快乐猫的博客-CSDN博客
3.自动装配类型
(1)按类型:byType(常用)
(2)按名称:byName(少用)
(3)按构造方法(几乎不用)
(4)不启用自动装配2
4.依赖自动装配特征
(1)自动装配用于引用类型依赖注入,不能对简单类型进行操作
(2)使用按类型装配时(byType)必须保障容器中相同类型的bean唯一。(推荐使用)
(3)使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因为变量名与配置耦合,所以(不推荐使用)
(4)自动装配优先级低于setter注入和构造器注入,如果同时出现,自动装配配置失效
5.依赖自动装配的缺点
(1)正常情况下,项目开发很少会用自动装配,对比起来明确清晰的配置文档没有优势
(2)只能根据类型或者名称自动装配,不能同时使用
(3)自动装配会默认装配bean里面的所有属性,想要装配单一的属性时候,就显得不够灵活
二、代码步骤(怎么用自动装配)
ps:修改xml文件里面的bean标签就好了,其他的不用动
(一)按类型(byType)装配(推荐)
实验目标:创建一个Dog类,一个Cat类,交给spring中心托管。然后把Dog类的方法注入到Cat类里面,让Cat类去调用。本项目用的是maven项目
1.创建一个Dog类
package com.spring6.bean;
public class Dog {
//1.新建一个方法
public void DogEat(){
System.out.println("这是狗的方法");
}
}
2.创建一个Cat类
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();
}
}
3.Dog类和Cat类统一交给spring管理(本文重点)
步骤:在resources里面创建一个配置xml文件。然后写入Dog和Cat这两个类的spring管理方式。
ps:注入类:Dog。被注入类:Cat。就像Cat类里面被针管容器注入Dog类的方法
没有使用自动装配的xml文件
使用自动装配后的xml文件
ps:区别就是在bean标签里面不用写那么多,只需要在被注入的bean标签里面加入autowire=”byType就好了
<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--1.配置Dog的XML文件 id:自定义。class:类的全限名-->
<bean id="DogBean" class="com.spring6.bean.Dog"/>
<!--2..配置cat的XML文件 ps:被注入的类里面要添加注入的-->
<!--本文核心:添加自动装配,只需要在被注入的bean里面添加autowire="byType就好了 -->
<bean id="catBean" class="com.spring6.bean.Cat" autowire="byType"/>
</beans>
4.Test测试的java包里面创建一个包一个测试类去测试运行
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();
}
}
5.运行结果(Cat类被注入了Dog类的方法)
(二)按名称(byName)装配
这个用的很少,就不写了
总结:
和set和构造器注入差别不大,唯一要修改的就是xml文件里面的被注入的bean文件里面不用写那么多繁琐的,把很多繁琐的都剔除改为autowire=”byType或者autowire=”byName。但是该有的bean标签的id和class还是必须要有的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/112604.html