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

Spring(一):IOC如何推導和理解

 更新時間:2021年07月06日 17:26:22   作者:熬夜加班寫代碼  
下面小編就為大家?guī)硪黄斦凷pring對IOC的理解(推薦篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

IOC的推導

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

①mapper層:因為沒有連接數(shù)據(jù)庫,這里我們寫一個mapper的實現(xiàn)類來模擬數(shù)據(jù)的查詢

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

②service層:service的作用是查詢?nèi)说男畔?/p>

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

④執(zhí)行結(jié)果如下:

image

image

1.2、多個種類的查詢

①mapper,增加老師實現(xiàn)類

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

③執(zhí)行結(jié)果:

image

image

④如果需求再次變更呢?只需要教師的信息怎么做呢? 毋庸置疑:兩種做法, 一種是直接更改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、優(yōu)化查詢方式

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

public class PersonServiceImpl implements PersonService {
    private PerMapper per;
    public void setPer(PerMapper per) {
        this.per = per;
    }
    @Override
    public void getPersonInfo() {
        per.getPerInfo();
    }
}

②controller層實現(xiàn)方式:

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

③總結(jié):這種方式就是把主動權(quán)交給了調(diào)用者 ,程序不用去管怎么創(chuàng)建,怎么實現(xiàn)了 .,它只負責提供一個接口 。

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

1.4、IOC本質(zhì)

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

相關文章

  • ZooKeeper框架教程Curator分布式鎖實現(xiàn)及源碼分析

    ZooKeeper框架教程Curator分布式鎖實現(xiàn)及源碼分析

    本文是ZooKeeper入門系列教程,本篇為大家介紹zookeeper一個優(yōu)秀的框架Curator,提供了各種分布式協(xié)調(diào)的服務,Curator中有著更為標準、規(guī)范的分布式鎖實現(xiàn)
    2022-01-01
  • mybatisPlus 實體類與數(shù)據(jù)庫表映射關系詳解

    mybatisPlus 實體類與數(shù)據(jù)庫表映射關系詳解

    這篇文章主要介紹了mybatisPlus 實體類與數(shù)據(jù)庫表映射關系詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java并發(fā)線程之線程池的知識總結(jié)

    Java并發(fā)線程之線程池的知識總結(jié)

    這篇文章主要介紹了Java并發(fā)線程之線程池的知識總結(jié),幫助大家更好的理解和學習Java并發(fā)線程的相關內(nèi)容,感興趣的朋友可以了解下
    2021-01-01
  • 詳解java的值傳遞、地址傳遞、引用傳遞

    詳解java的值傳遞、地址傳遞、引用傳遞

    這篇文章主要介紹了詳解java的值傳遞、地址傳遞、引用傳遞的相關資料,需要的朋友可以參考下
    2017-06-06
  • SpringSecurity在單機環(huán)境下使用方法詳解

    SpringSecurity在單機環(huán)境下使用方法詳解

    本文詳細介紹了SpringSecurity和SpringBoot的整合過程,包括配置用戶認證、JSP頁面的使用、數(shù)據(jù)庫認證以及授權(quán)功能的實現(xiàn),感興趣的朋友一起看看吧
    2025-02-02
  • SpringBoot中的HATEOAS詳情

    SpringBoot中的HATEOAS詳情

    這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開詳細介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • java實現(xiàn)圖片加水印效果

    java實現(xiàn)圖片加水印效果

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖片加水印效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Spring Boot使用yml格式進行配置的方法

    Spring Boot使用yml格式進行配置的方法

    很多springboot項目使用的是yml格式,主要目的是方便對讀懂其他人的項目,下面小編通過本文給大家分享Spring Boot使用yml格式進行配置的方法,需要的朋友參考下吧
    2018-04-04
  • SpringBoot集成Redis數(shù)據(jù)庫,實現(xiàn)緩存管理

    SpringBoot集成Redis數(shù)據(jù)庫,實現(xiàn)緩存管理

    SpringBoot2 版本,支持的組件越來越豐富,對Redis的支持不僅僅是擴展了API,更是替換掉底層Jedis的依賴,換成Lettuce。 本案例需要本地安裝一臺Redis數(shù)據(jù)庫。下面就來看下集成Redis的步驟
    2021-06-06
  • 利用Maven添加工程版本信息及時間戳

    利用Maven添加工程版本信息及時間戳

    這篇文章主要介紹了利用Maven添加工程版本信息及時間戳方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

托克托县| 分宜县| 宝丰县| 北流市| 济阳县| 金溪县| 双桥区| 崇阳县| 宜君县| 日土县| 屏东市| 临桂县| 淮滨县| 上虞市| 东兴市| 义乌市| 梧州市| 临邑县| 林西县| 宣化县| 崇礼县| 乌兰浩特市| 河东区| 曲阜市| 白水县| 长海县| 迁安市| 武穴市| 壤塘县| 双流县| 上高县| 商河县| 肥东县| 吴桥县| 香港| 休宁县| 汝阳县| 彭阳县| 泸溪县| 普格县| 瑞昌市|