欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Spring中IOC的理解和認知

 更新時間:2021年04月08日 11:54:12   作者:大大丁大大  
這篇文章主要介紹了淺談Spring中IOC的理解和認知,想了解Spring的同學不要錯過啊

IOC的推導

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

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

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

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

③執(zhí)行結果:

④如果需求再次變更呢?只需要教師的信息怎么做呢?
毋庸置疑:兩種做法,
一種是直接更改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() 方法,對接口不實現,只進行預留的工作。

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

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

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

1.4、IOC本質

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

以上就是關于Spring之IOC的理解和認知的詳細內容,更多關于Spring之IOC的理解的資料請關注腳本之家其它相關文章!

相關文章

  • 解決Java提示正在嘗試分配更低的訪問權限問題

    解決Java提示正在嘗試分配更低的訪問權限問題

    在本篇文章里小編給大家整理的是關于解決Java提示正在嘗試分配更低的訪問權限問題的相關方法內容,有需要的朋友們跟著參考學習下。
    2019-07-07
  • java在linux系統下開機啟動無法使用sudo命令的原因及解決辦法

    java在linux系統下開機啟動無法使用sudo命令的原因及解決辦法

    每次開機自動啟動的java進程,頁面上的關機按鈕都無法實現關機功能,但是此時如果以chb賬號通過ssh登錄該服務器,手動殺掉tomcat進程,然后再重新啟動tomcat,頁面上的關機按鈕就有效了
    2013-08-08
  • Spring boot動態(tài)修改日志級別的方法

    Spring boot動態(tài)修改日志級別的方法

    我們經常會遇到業(yè)務想看debug日志的問題,但是debug日志頻繁打印會對日志查看有影響,且日志多對系統也會有一定的壓力,因此,如果可以在需要的時候動態(tài)臨時調整下日志的級別則是比較完美的,spring boot已經支持這種功能,需要的朋友可以參考下
    2022-12-12
  • Mybatis-plus如何通過反射實現動態(tài)排序不同字段功能

    Mybatis-plus如何通過反射實現動態(tài)排序不同字段功能

    這篇文章主要介紹了Mybatis-plus如何通過反射實現動態(tài)排序不同字段功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • java實現字符串的全排列

    java實現字符串的全排列

    這篇文章主要為大家詳細介紹了java實現字符串的全排列,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java面向對象和內存分析圖文詳解

    Java面向對象和內存分析圖文詳解

    這篇文章主要給大家介紹了關于Java面向對象和內存分析的相關資料,文章可以讓初學者順利的分析內存,更加容易的體會程序執(zhí)行過程中內存的變化,需要的朋友可以參考下
    2021-05-05
  • Java獲取堆棧信息的三種方法小結

    Java獲取堆棧信息的三種方法小結

    在Java編程中,獲取堆棧信息對于調試和故障排除非常重要,Java提供了多種方式來獲取當前線程的堆棧信息,下面就跟隨小編一起學習一下常用的三種吧
    2024-03-03
  • java異常處理執(zhí)行順序詳解try catch finally

    java異常處理執(zhí)行順序詳解try catch finally

    try catch語句是java語言用于捕獲異常并進行處理的標準方式,對于try catch及try catch finally執(zhí)行順序必須有深入的了解
    2021-10-10
  • Java Springboot 重要知識點整理匯總

    Java Springboot 重要知識點整理匯總

    Spring Boot作為微服務中最好的Java框架,本文主要為大家整理匯總了七個Spring Boot的重要知識點,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11
  • Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    在java中處理字符時,經常會發(fā)生亂碼,下面這篇文章主要給大家介紹了關于Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論