Spring中DI介绍

导读:本篇文章讲解 Spring中DI介绍,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95487.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!