91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中IOC實例分析

發布時間:2022-02-24 17:47:55 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Spring中IOC實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Spring中IOC實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

IOC的推導

1.1、模擬一個正常查詢信息的業務流程:

①mapper層:因為沒有連接數據庫,這里我們寫一個mapper的實現類來模擬數據的查詢

public interface PerMapper {
    void getPerInfo();
}
public class StudentMapperImpl implements PerMapper {

    @Override
    public void getPerInfo() {
        System.out.println("我是一個學生");
    }
}

②service層:service的作用是查詢人的信息

public interface PersonService {
    void getPersonInfo();
}
public class PersonServiceImpl implements PersonService {

    private PerMapper studentMapper = new StudentMapperImpl();

    @Override
    public void getPersonInfo() {
        studentMapper.getPerInfo();
    }
}

③contorller層

import service.PersonService;
import service.impl.PersonServiceImpl;

public class IOCTest {
    public static void main(String[] args) {
        PersonService service = new PersonServiceImpl();
        service.getStudentInfo();
    }
}

1.2、多個種類的查詢

①mapper,增加老師實現類

public class TeacherMapperImpl implements PerMapper {

    @Override
    public void getPerInfo() {
        System.out.println("我是一個老師");
    }
}

②這時候我們同時查詢教師和學生的信息該怎么做呢?

public class PersonServiceImpl implements PersonService {

    private PerMapper student = new StudentMapperImpl();
    private PerMapper teacher = new TeacherMapperImpl();

    @Override
    public void getPersonInfo() {
        student.getPerInfo();
        teacher.getPerInfo();
    }
}

如果需求再次變更呢?只需要教師的信息怎么做呢?
毋庸置疑:兩種做法,
一種是直接更改PersonServiceImpl的getPersonInfo()

   @Override
    public void getPersonInfo() {
//        student.getPerInfo();
        teacher.getPerInfo();
    }

第二種是擴展service層的接口,把老師和學生分別提供接口來查詢:

public interface PersonService {
    void getPersonInfo();
    void getPersonInfo1();
}
    public class PersonServiceImpl implements PersonService {

    private PerMapper student = new StudentMapperImpl();
    private PerMapper teacher = new TeacherMapperImpl();

    @Override
    public void getPersonInfo() {
        teacher.getPerInfo();
    }

    @Override
    public void getPersonInfo1() {
        student.getPerInfo();
    }
}

⑤看起來好像沒啥問題是吧?那假如有一百種人呢?需要改來改去人都會瘋掉的。這種做法肯定不合理的!

1.3、優化查詢方式

①聰明的孩子可以想到將查詢的對象剝離出來:添加 set() 方法,對接口不實現,只進行預留的工作。

public class PersonServiceImpl implements PersonService {

    private PerMapper per;

    public void setPer(PerMapper per) {
        this.per = per;
    }

    @Override
    public void getPersonInfo() {
        per.getPerInfo();
    }

}

②controller層實現方式:

public class IOCTest {
    public static void main(String[] args) {
        PersonServiceImpl service = new PersonServiceImpl();
        //學生
        service.setPer(new StudentMapperImpl());
        service.getPersonInfo();
        //老師
        service.setPer(new TeacherMapperImpl());
        service.getPersonInfo();
    }
}

③總結:這種方式就是把主動權交給了調用者 ,程序不用去管怎么創建,怎么實現了 .,它只負責提供一個接口 。

我們不再去管理對象的創建了 , 更多的去關注業務的實現 ,耦合性大大降低 ,這也就是IOC的原型 !

1.4、IOC本質

控制反轉是一種通過描述(XML或注解)并通過第三方去生產或獲取特定對象的方式。在Spring中實現控制反轉的是IOC容器,其實現方法是依賴注入(Dependency Injection,DI)。

讀到這里,這篇“Spring中IOC實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遵化市| 西贡区| 吴川市| 扎鲁特旗| 东至县| 合江县| 夏邑县| 宣恩县| 泰兴市| 桑日县| 镇平县| 礼泉县| 平乐县| 山阴县| 湘潭县| 滦平县| 驻马店市| 石柱| 临朐县| 盐津县| 屯门区| 广宗县| 怀宁县| 宣城市| 嘉兴市| 德化县| 镶黄旗| 稷山县| 湾仔区| 蕉岭县| 济源市| 聊城市| 兴安盟| 永善县| 商都县| 涞源县| 乐业县| 额济纳旗| 伊宁县| 枣庄市| 新竹县|