淺談Spring中IOC的理解和認知
IOC的推導(dǎo)
1.1、模擬一個正常查詢信息的業(yè)務(wù)流程:
①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é)果如下:

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é)果:

④如果需求再次變更呢?只需要教師的信息怎么做呢?
毋庸置疑:兩種做法,
一種是直接更改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),只進行預(yù)留的工作。
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)建了 , 更多的去關(guān)注業(yè)務(wù)的實現(xiàn) ,耦合性大大降低 ,這也就是IOC的原型 !
1.4、IOC本質(zhì)
控制反轉(zhuǎn)是一種通過描述(XML或注解)并通過第三方去生產(chǎn)或獲取特定對象的方式。在Spring中實現(xiàn)控制反轉(zhuǎn)的是IOC容器,其實現(xiàn)方法是依賴注入(Dependency Injection,DI)。
以上就是關(guān)于Spring之IOC的理解和認知的詳細內(nèi)容,更多關(guān)于Spring之IOC的理解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring線程池ThreadPoolExecutor配置并且得到任務(wù)執(zhí)行的結(jié)果
今天小編就為大家分享一篇關(guān)于Spring線程池ThreadPoolExecutor配置并且得到任務(wù)執(zhí)行的結(jié)果,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Spring MVC 中 短信驗證碼功能的實現(xiàn)方法
短信驗證功能在各個網(wǎng)站應(yīng)用都非常廣泛,那么在springmvc中如何實現(xiàn)短信驗證碼功能呢?今天小編抽時間給大家介紹下Spring MVC 中 短信驗證碼功能的實現(xiàn)方法,一起看看吧2016-09-09
Mybatis控制臺打印SQL語句的兩種方式實現(xiàn)
這篇文章主要介紹了Mybatis控制臺打印SQL語句的兩種方式實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
詳解如何使用Spring的@FeignClient注解實現(xiàn)通信功能
SpringBoot是一個非常流行的Java框架,它提供了一系列工具來使這種交互無縫且高效,在這些工具中,@FeignClient注解因其易用性和強大的功能而脫穎而出, 在這篇文章中,我們將探討如何使用Spring的@FeignClient注解進行客戶端-服務(wù)器通信,需要的朋友可以參考下2023-11-11
關(guān)于HashMap相同key累加value的問題
這篇文章主要介紹了關(guān)于HashMap相同key累加value的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖
這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03

