最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2025年12月13日 10:50:05   作者:222you  
文章介紹了Spring框架中的IOC(控制反轉(zhuǎn))和DI(依賴注入)概念,并展示了如何通過(guò)配置文件進(jìn)行屬性的set方法注入、構(gòu)造方法注入及數(shù)組、集合等復(fù)雜類型的注入,通過(guò)實(shí)例代碼和流程分析,清晰展示了依賴注入在Spring中的實(shí)現(xiàn)原理和使用方法,感興趣的朋友跟隨小編一起看看吧

1.IOC和DI的概念

IOC:InverseofControl,控制反轉(zhuǎn),將對(duì)象的創(chuàng)建權(quán)反轉(zhuǎn)給Spring。

DI:DependencyInjection,依賴注入,在Spring框架負(fù)責(zé)創(chuàng)建Bean對(duì)象時(shí), 動(dòng)態(tài)的將依賴對(duì)象注入到Bean組件中。

2.屬性的set方法注入值

編寫持久層OrderDao及其實(shí)現(xiàn)類:

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();
}

業(yè)務(wù)層OrderService及其實(shí)現(xiàn)類:

package com.qcby.service.Impl;
import com.qcby.dao.OrderDao;
import com.qcby.service.OrderService;
public class OrderServiceImpl implements OrderService {
    //提供該屬性的set方法,IOC容器底層通過(guò)屬性的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("業(yè)務(wù)層:保存訂單:"+msg+" - "+age);
        orderDao.saveOrder();
    }
}
package com.qcby.service;
public interface OrderService {
    void saveOrder();
}

測(cè)試方法:

    /**
     * 測(cè)試DI注入
     */
    @Test
    public void testDI(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //獲取到了OderService的Bean,這個(gè)Bean里面的信息在配置文件里面配置好了
        OrderService orderService = (OrderService) context.getBean("os");
        orderService.saveOrder();
    }

運(yùn)行:

流程分析:

Spring讀取配置文件后,會(huì)首先創(chuàng)建OrderDaoImpl,以od為鍵存入容器

<bean id="od" class="com.qcby.dao.Impl.OrderDaoImpl"/>

然后創(chuàng)建OrderServiceImpl

    <bean id="os" class="com.qcby.service.Impl.OrderServiceImpl">
        <!--找到OrderDao的setOrderDao方法,把這個(gè)bean注入到os里面-->
        <property name="orderDao" ref="od"/>
        <!--給OrderServiceImpl賦值,也是通過(guò)set方法賦值-->
        <property name="msg" value="你好"/>
        <property name="age" value="19"/>
    </bean>

通過(guò)無(wú)參構(gòu)造方法創(chuàng)建OrderServiceImpl實(shí)例,再通過(guò)setOrderDao、setMsg和setAge方法來(lái)獲取值,也就是依賴注入

測(cè)試代碼首先讀取配置文件(第一行代碼),獲取到了orderServiceImpl這個(gè)Bean(第二行代碼),最后調(diào)用對(duì)象的saveOrder方法。

3.屬性的構(gòu)造方法注入值

新建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 + '\'' +
                '}';
    }
}

在配置文件當(dāng)中配置:

    <!--構(gòu)造方法注入值-->
    <bean id="car" class="com.qcby.eneity.Car">
        <constructor-arg name="name" value="福特"/>
        <constructor-arg name="money" value="1000000"/>
    </bean>

測(cè)試方法:

    /**
     * 測(cè)試構(gòu)造方法注入
     */
    @Test
    public void testConstructor(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = (Car) context.getBean("car");
        System.out.println(car);
    }

運(yùn)行:

constructor-arg是構(gòu)造器參數(shù),用于構(gòu)造方法注入,name是參數(shù)名字,value是參數(shù)的值

4.數(shù)組,集合(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 {
    //數(shù)組
    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>

測(cè)試代碼

    /**
     * 引用類型的注入
     */
    @Test
    public void testReferenceType(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        CollectionBean collectionBean = (CollectionBean) context.getBean("collectionBean");
        System.out.println(collectionBean);
    }

結(jié)果:

到此這篇關(guān)于Spring的DI依賴注入(配置文件方式)的文章就介紹到這了,更多相關(guān)Spring DI依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux部署springBoot項(xiàng)目的腳本問(wèn)題

    linux部署springBoot項(xiàng)目的腳本問(wèn)題

    這篇文章主要介紹了linux部署springBoot項(xiàng)目的腳本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Java中常見(jiàn)的日期操作(取值、轉(zhuǎn)換、加減、比較)

    Java中常見(jiàn)的日期操作(取值、轉(zhuǎn)換、加減、比較)

    本文給大家介紹java中常見(jiàn)的日期操作,日期取值、日期轉(zhuǎn)換、日期加減、日期比較,對(duì)java日期操作相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Mybatis-plus插入后返回元素id的問(wèn)題

    Mybatis-plus插入后返回元素id的問(wèn)題

    這篇文章主要介紹了Mybatis-plus插入后返回元素id的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java設(shè)計(jì)模式中的組合模式

    Java設(shè)計(jì)模式中的組合模式

    這篇文章主要介紹了Java設(shè)計(jì)模式中的組合模式,組合模式依據(jù)樹(shù)形結(jié)構(gòu)來(lái)組合對(duì)象,用來(lái)表示部分以及整體層次,種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式
    2022-07-07
  • 基于SpringBoot的SSMP的整合案例

    基于SpringBoot的SSMP的整合案例

    這篇文章主要介紹了SpringBoot整合SSMP的詳細(xì)教程,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java中String類getBytes()方法詳解與完整實(shí)例

    Java中String類getBytes()方法詳解與完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java中String類getBytes()方法詳解與完整實(shí)例的相關(guān)資料,getBytes()是Java編程語(yǔ)言中將一個(gè)字符串轉(zhuǎn)化為一個(gè)字節(jié)數(shù)組byte[]的方法,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件上傳案例示例代碼

    Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件上傳案例示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件上傳案例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 淺析SpringBoot3.x 如何避免內(nèi)部服務(wù)調(diào)用被重復(fù)攔截

    淺析SpringBoot3.x 如何避免內(nèi)部服務(wù)調(diào)用被重復(fù)攔截

    這篇文章主要為大家詳細(xì)介紹了SpringBoot3.x 避免內(nèi)部服務(wù)調(diào)用被重復(fù)攔截的相關(guān)方法,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2025-09-09
  • Java靈活使用枚舉表示一組字符串的操作

    Java靈活使用枚舉表示一組字符串的操作

    這篇文章主要介紹了Java靈活使用枚舉表示一組字符串的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring攔截器之HandlerInterceptor使用方式

    Spring攔截器之HandlerInterceptor使用方式

    這篇文章主要介紹了Spring攔截器之HandlerInterceptor使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

安顺市| 彭州市| 丰镇市| 临城县| 常德市| 古交市| 洛浦县| 水富县| 高陵县| 伊川县| 桦甸市| 邓州市| 高陵县| 许昌市| 青冈县| 济阳县| 渭源县| 商水县| 湟中县| 栾川县| 莱西市| 南京市| 平邑县| 醴陵市| 荆门市| 新丰县| 寿宁县| 汾阳市| 砚山县| 黄石市| 武鸣县| 横峰县| 平阴县| 聂拉木县| 海伦市| 乌恰县| 腾冲县| 永宁县| 蓬溪县| 讷河市| 福建省|