当前位置: 代码网 > it编程>编程语言>Java > 深入解析Spring的DI依赖注入(配置文件方式)

深入解析Spring的DI依赖注入(配置文件方式)

2025年12月13日 Java 我要评论
1.ioc和di的概念ioc:inverseofcontrol,控制反转,将对象的创建权反转给spring。di:dependencyinjection,依赖注入,在spring框架负责创建bean对

1.ioc和di的概念

ioc:inverseofcontrol,控制反转,将对象的创建权反转给spring。

di:dependencyinjection,依赖注入,在spring框架负责创建bean对象时, 动态的将依赖对象注入到bean组件中。

2.属性的set方法注入值

编写持久层orderdao及其实现类:

package com.qcby.dao.impl;
import com.qcby.dao.orderdao;
public class orderdaoimpl implements orderdao {
    @override
    public void saveorder() {
        system.out.println("持久层:保存订单........");
    }
}
package com.qcby.dao;
public interface orderdao {
    void saveorder();
}

业务层orderservice及其实现类:

package com.qcby.service.impl;
import com.qcby.dao.orderdao;
import com.qcby.service.orderservice;
public class orderserviceimpl implements orderservice {
    //提供该属性的set方法,ioc容器底层通过属性的set方法注入值
    private orderdao orderdao;
    public void setorderdao(orderdao orderdao) {
        this.orderdao = orderdao;
    }
    //消息
    private string msg;
    //年龄
    private int age;
    public void setmsg(string msg) {
        this.msg = msg;
    }
    public void setage(int age) {
        this.age = age;
    }
    @override
    public void saveorder() {
        system.out.println("业务层:保存订单:"+msg+" - "+age);
        orderdao.saveorder();
    }
}
package com.qcby.service;
public interface orderservice {
    void saveorder();
}

测试方法:

    /**
     * 测试di注入
     */
    @test
    public void testdi(){
        applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
        //获取到了oderservice的bean,这个bean里面的信息在配置文件里面配置好了
        orderservice orderservice = (orderservice) context.getbean("os");
        orderservice.saveorder();
    }

运行:

流程分析:

spring读取配置文件后,会首先创建orderdaoimpl,以od为键存入容器

<bean id="od" class="com.qcby.dao.impl.orderdaoimpl"/>

然后创建orderserviceimpl

    <bean id="os" class="com.qcby.service.impl.orderserviceimpl">
        <!--找到orderdao的setorderdao方法,把这个bean注入到os里面-->
        <property name="orderdao" ref="od"/>
        <!--给orderserviceimpl赋值,也是通过set方法赋值-->
        <property name="msg" value="你好"/>
        <property name="age" value="19"/>
    </bean>

通过无参构造方法创建orderserviceimpl实例,再通过setorderdao、setmsg和setage方法来获取值,也就是依赖注入

测试代码首先读取配置文件(第一行代码),获取到了orderserviceimpl这个bean(第二行代码),最后调用对象的saveorder方法。

3.属性的构造方法注入值

新建car类

package com.qcby.eneity;
public class car {
    //名称
    private string name;
    //金额
    private string money;
    public car() {
    }
    public car(string name, string money) {
        this.name = name;
        this.money = money;
    }
    @override
    public string tostring() {
        return "car{" +
                "name='" + name + '\'' +
                ", money='" + money + '\'' +
                '}';
    }
}

在配置文件当中配置:

    <!--构造方法注入值-->
    <bean id="car" class="com.qcby.eneity.car">
        <constructor-arg name="name" value="福特"/>
        <constructor-arg name="money" value="1000000"/>
    </bean>

测试方法:

    /**
     * 测试构造方法注入
     */
    @test
    public void testconstructor(){
        applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
        car car = (car) context.getbean("car");
        system.out.println(car);
    }

运行:

constructor-arg是构造器参数,用于构造方法注入,name是参数名字,value是参数的值

4.数组,集合(list,set,map),properties 等的注入

新建collectionbean类

package com.qcby.eneity;
import java.util.arrays;
import java.util.list;
import java.util.map;
import java.util.properties;
public class collectionbean {
    //数组
    private string[]strs;
    public void setstrs(string[]strs){
        this.strs=strs;
    }
    private list<string> list;
    public void setlist(list<string>list){
        this.list=list;
    }
    private map<string,string> map;
    public void setmap(map<string,string>map){
        this.map=map;
    }
    private properties properties;
    public void setproperties(properties properties){
        this.properties=properties;
    }
    @override
    public string tostring(){
        return"collectionbean{"+
                "strs="+ arrays.tostring(strs)+
                ",list="+list+
                ",map="+map+
                ",properties="+properties+
                '}';
    }
}

配置bean

    <!--给集合属性注入值-->
    <bean id="collectionbean" class="com.qcby.eneity.collectionbean">
        <property name="strs">
            <array>
                <value>美美</value>
                <value>凤凤</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>熊大</value>
                <value>熊二</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="aaa" value="老王"/>
                <entry key="bbb" value="小王"/>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="username">root</prop>
                <prop key="password">123456</prop>
            </props>
        </property>
    </bean>

测试代码

    /**
     * 引用类型的注入
     */
    @test
    public void testreferencetype(){
        applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
        collectionbean collectionbean = (collectionbean) context.getbean("collectionbean");
        system.out.println(collectionbean);
    }

结果:

到此这篇关于spring的di依赖注入(配置文件方式)的文章就介绍到这了,更多相关spring di依赖注入内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com