spring依赖自动装配(传统依赖注入升级版)

目录

一、介绍

1.什么是依赖自动装配?

2.为什么要用依赖自动装配?

3.自动装配类型

4.依赖自动装配特征

5.依赖自动装配的缺点

二、代码步骤(怎么用自动装配)

(一)按类型(byType)装配(推荐)

1.创建一个Dog类 

 2.创建一个Cat类

3.Dog类和Cat类统一交给spring管理(本文重点)

4.Test测试的java包里面创建一个包一个测试类去测试运行

 5.运行结果(Cat类被注入了Dog类的方法)

 (二)按名称(byName)装配

 总结:


一、介绍

1.什么是依赖自动装配?

答:IOC容器根据bean所依赖的资源在容器中自动查找并注入bean中的过程中称为自动装配

这是IOC容器的文章

spring的控制反转(IOC)与依赖注入实现方式(DI)_云边的快乐猫的博客-CSDN博客

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类的方法

快速入门使用spring详细步骤(介绍、导入依赖、第一个简单程序)_云边的快乐猫的博客-CSDN博客

 没有使用自动装配的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还是必须要有的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云边的快乐猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值