Spring中DI介绍

Spring中DI介绍

DI(Dependency Injection)即依赖注入,对象之间的依赖由容器在运行期决定,即容器动态的将某个依赖注入到对象之中。

一、基于XML配置注入依赖

1. 有参构造函数注入依赖

①bean类实现有参构造函数
在这里插入图片描述
②在配置文件中配置参数通过有参构造函数给对象属性赋值

有参构造是使用constructor-arg标签

 <bean id="student4" class="com.wyscoder.spring.IOC.pojo.Student" >
        <constructor-arg name="id" value="1"/>
        <constructor-arg name="name" value="吕布" />
</bean>

③测试
在这里插入图片描述

2. set方法注入依赖

①给对象的属性提供setter方法
在这里插入图片描述
②在配置文件中通过set方式赋值

通过set方式使用的是property标签

<bean id="student5" class="com.wyscoder.spring.IOC.pojo.Student">
       <property name="id" value="1"/>
       <property name="name" value="王昭君"/>
</bean>

测试
在这里插入图片描述

3. 注入自定义类型

注入的依赖也可以是自定义类型

①添加自定义类型

public class User {
    private int id;
    private String name;

    public User() {
    }

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

在这里插入图片描述
②配置文件

自定义类型也是要交给spring管理,如何获取管理对象实例呢
使用ref属性来获取值,该ref会自动识别为spring中对象的名字
使用value属性来获取值,spring会认为仅仅是一个字符串值

<!--注入自定义类型-->
<bean id="user" class="com.wyscoder.spring.IOC.pojo.User">
    <constructor-arg name="id" value="1"/>
    <constructor-arg name="name" value="ww"/>
</bean>
<bean id="student6" class="com.wyscoder.spring.IOC.pojo.Student" >
    <property name="id" value="1"/>
    <property name="name" value="王昭君"/>
    <property name="user" ref="user"/>
</bean>

③测试
在这里插入图片描述

4. 注入集合类型

①添加集合属性
在这里插入图片描述
②配置文件

<!--注入集合类型-->
<bean id="student7" class="com.wyscoder.spring.IOC.pojo.Student">
    <property name="id" value="1"/>
    <property name="name" value="赵云"/>
    <!--注入list类型-->
    <property name="course">
        <list>
            <value>C++</value>
            <value>Java</value>
            <value>Python</value>
        </list>
    </property>
    <!--注入map类型-->
    <property name="score" >
        <map>
            <entry key="C++" value="100"/>
            <entry key="Java" value="99"/>
            <entry key="Python" value="98"/>
        </map>
    </property>
</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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启扫描:指定到包路径或者类名;会扫描类、方法、属性上是否有注解-->
    <context:component-scan base-package="com.wyscoder.spring.IOC"/>
</beans>
注解说明
@Value注入普通类型属性
@Resource注入对象类型
@Autowired注入对象类型

1. @Value

该注解只能添加到普通类型上, @Value(“1”)注解中可以赋值完成对基础属性的依赖注入。

@Component(value = "student")
public class Student {
    @Value("1")
    private Integer id;
}

2. @Resource

该注解是注入对象类型,该注解是由Java 提供的,注意不是spring框架提供,默认按照名称进行装配

@Component(value = "student")
public class Student {
    //自定义类型
   @Resource(name = "user")
    private User user;

3. @Autowired

注入对象类型 ,是Spring框架提供的,按照类型来注入

@Component(value = "student")
public class Student {
    //自定义类型
   @Autowired
    private User user;
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring是一个流行的Java应用程序框架,其DI(依赖注入)是一个重要的概念。 在SpringDI是一种设计模式,用于将对象之间的依赖关系从代码移除,从而实现松耦合并提高可重用性和可测试性。在DI,对象不会自行实例化其依赖项,而是将这些依赖项传递给它们。 Spring框架DI实现主要有两种方式:构造函数注入和属性注入。 在构造函数注入,依赖项通过对象的构造函数传递。这种方式可以确保依赖项在对象被实例化时就已经存在。 在属性注入,依赖项通过Setter方法或直接设置公共字段注入到对象。这种方式更加灵活,因为它允许对象在运行时更改其依赖项。 Spring框架还提供了一些依赖项注入的方式,如接口注入和注解注入,这些方式可以让开发人员更加方便地管理依赖项。 总之,SpringDI是一种强大的编程模式,可以让开发人员更加灵活地管理对象之间的依赖关系,从而提高代码的可重用性和可测试性。 ### 回答2: SpringDI(依赖注入)是通过IOC(控制反转)实现的。在Spring,使用IOC容器来管理对象的创建和依赖关系的注入。 首先,我们需要在Spring的配置文件定义要管理的对象。可以使用XML配置文件或Java注解来完成配置。在配置文件,我们可以指定对象的类名、属性、构造函数等信息。 然后,在程序运行时,SpringIOC容器会根据配置信息创建对象,并将对象的依赖注入到对象。依赖注入可以通过构造函数、setter方法或字段注入来完成。 SpringIOC容器会自动解析对象之间的依赖关系,并保证依赖关系正确地注入到对象。这样,我们就可以通过IOC容器来管理对象的创建和依赖关系,而不需要手动去创建对象或者处理对象之间的依赖关系。 通过使用IOC容器,我们可以实现松耦合的对象之间的交互。对象之间的依赖关系不再硬编码在代码,而是由IOC容器来管理。这样,我们可以很方便地修改对象之间的依赖关系,而不需要修改源代码。 总结来说,SpringDI通过IOC容器实现,将对象的依赖关系注入到对象,实现了对象之间的松耦合。这种设计模式可以提高代码的可扩展性和可维护性,使系统更加灵活和易于测试。 ### 回答3: Spring的依赖注入(Dependency Injection,DI)是指通过容器自动将一个对象所依赖的其他对象注入到该对象的过程。 在SpringDI的实现主要依赖于以下两个核心机制: 1. Bean的定义:通过使用XML配置文件或者注解的方式,我们可以将一个对象(即Bean)标识为一个可被Spring管理的对象。在配置文件,我们需要指定这个对象所依赖的其他对象或者值。这样Spring就知道了哪些对象需要被注入到该Bean。 2. 容器的实例化和管理:Spring容器负责创建和管理所有的Bean。它会读取配置文件的Bean定义,并根据定义的信息来创建相应的Bean实例。当容器创建一个Bean时,它会检查该Bean所依赖的其他Bean,并将它们注入到该Bean。这样就完成了对象之间的依赖关系的建立。 值得注意的是,Spring的依赖注入有多种方式的实现: 1. 构造函数注入:通过构造函数来注入依赖的对象。在Bean的定义,我们可以指定构造函数的参数,Spring会根据参数的类型和名称来寻找对应的依赖对象进行注入。 2. Setter方法注入:通过Setter方法来注入依赖的对象。在Bean的定义,我们可以将依赖的对象定义为Bean的属性,并提供相应的Setter方法。Spring会调用这些Setter方法,将依赖的对象注入到Bean。 3. 接口注入:通过实现特定的接口来注入依赖的对象。在Bean的定义,我们可以实现一些特定的接口,如ApplicationContextAware、BeanFactoryAware等。Spring容器会检测到这些接口的存在,并通过调用对应的方法将依赖的对象传递到Bean。 总的来说,Spring的依赖注入是一种通过容器自动管理对象之间的依赖关系的方式。它使得我们能够更加灵活地组织和管理对象,并实现对象之间的解耦。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WYSCODER

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

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

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

打赏作者

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

抵扣说明:

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

余额充值