淺談一下Spring的核心基礎(chǔ)IOC與DI
一、Spring簡介
1 Spring介紹
1.1 為什么要學(xué)
Spring技術(shù)是JavaEE開發(fā)必備技能,企業(yè)開發(fā)技術(shù)選型命中率>90%
專業(yè)角度
簡化開發(fā),降低企業(yè)級開發(fā)的復(fù)雜性框架整合,高效整合其他技術(shù),提高企業(yè)級應(yīng)用開發(fā)與運行效率
1.2 學(xué)什么
簡化開發(fā)
- IOC(反轉(zhuǎn)控制)
- AOP(面向切面編程)
- 事務(wù)處理
框架整合
- MyBatis
- MyBatis-plus
- Struts
- Struts2
- Hibernate……
2 初識Spring
2.1 Spring家族
官網(wǎng):https://spring.ioSpring發(fā)展到今天已經(jīng)形成了一種開發(fā)的生態(tài)圈,Spring提供了若干個項目,每個項目用于完成特定的功能。
2.2 Spring發(fā)展史
注意:現(xiàn)在已經(jīng)有spring6了哦!
3 Spring體系結(jié)構(gòu)
3.1 Spring Framework系統(tǒng)架構(gòu)圖
Spring Framework是Spring生態(tài)圈中最基礎(chǔ)的項目,是其他項目的根基
4 Spring核心概念
問題導(dǎo)入
4.1 核心概念
IOC(Inversion of Control)控制反轉(zhuǎn)
使用對象時,由主動new產(chǎn)生對象轉(zhuǎn)換為由外部
提供對象,此過程中對象創(chuàng)建控制權(quán)由程序轉(zhuǎn)移到外部,此思想稱為控制反轉(zhuǎn)。通俗的講就是“將new對象的權(quán)利交給Spring,我們從Spring中獲取對象使用即可
”
Spring技術(shù)對IoC思想進行了實現(xiàn)
Spring提供了一個容器,稱為IOC容器
,用來充當(dāng)IoC思想中的“外部”IOC容器負責(zé)對象的創(chuàng)建、初始化等一系列工作,被創(chuàng)建或被管理的對象在IoC容器中統(tǒng)稱為Bean
DI(Dependency Injection)依賴注入
在容器中建立bean與bean之間的依賴關(guān)系的整個過程,稱為依賴注入。
目標(biāo):充分解耦
- 使用IoC容器管理bean(IOC)
- 在IoC容器內(nèi)將有依賴關(guān)系的bean進行關(guān)系綁定(DI)
最終效果
- 使用對象時不僅可以直接從IoC容器中獲取,并且獲取到的bean已經(jīng)綁定了所有的依賴關(guān)系
二、IOC和DI入門
1 IOC入門
問題導(dǎo)入
<bean>標(biāo)簽中id屬性和class屬性的作用是什么?
1.1 門案例思路分析
管理什么?(Service與Dao)
如何將被管理的對象告知IOC容器?(配置文件)
被管理的對象交給IOC容器,如何獲取到IoC容器?(接口)
IOC容器得到后,如何從容器中獲取bean?(接口方法)
使用Spring導(dǎo)入哪些坐標(biāo)?(pom.xml)
1.2 實現(xiàn)步驟
【第一步】導(dǎo)入Spring坐標(biāo) 【第二步】定義Spring管理的類(接口) 【第三步】創(chuàng)建Spring配置文件,配置對應(yīng)類作為Spring管理的bean對象 【第四步】初始化IOC容器(Spring核心容器/Spring容器),通過容器獲取bean對象
1.3 實現(xiàn)代碼
【第一步】導(dǎo)入Spring坐標(biāo)
<dependencies> <!--導(dǎo)入spring的坐標(biāo)spring-context,對應(yīng)版本是5.2.10.RELEASE--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies>
【第二步】定義Spring管理的類(接口)
BookDao接口和BookDaoImpl實現(xiàn)類
public interface BookDao { public void save(); } public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } }
BookService接口和BookServiceImpl實現(xiàn)類
public interface BookService { public void save(); } public class BookServiceImpl implements BookService { private BookDao bookDao = new BookDaoImpl(); public void save() { System.out.println("book service save ..."); bookDao.save(); } }
【第三步】創(chuàng)建Spring配置文件,配置對應(yīng)類作為Spring管理的bean對象
定義applicationContext.xml配置文件并配置BookServiceImpl
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- bean標(biāo)簽:表示配置bean id屬性:表示給bean起名字 class屬性:表示給bean定義類型 --> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"></bean> </beans>
注意事項:bean定義時id屬性在同一個上下文中(IOC容器中)不能重復(fù)
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通過容器獲取Bean對象
public class App { public static void main(String[] args) { //1.創(chuàng)建IoC容器對象,加載spring核心配置文件 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //2 從IOC容器中獲取Bean對象(BookService對象) BookService bookService= (BookService)ctx.getBean("bookService"); //3 調(diào)用Bean對象(BookService對象)的方法 bookService.save(); } }
1.4 運行結(jié)果
2 DI入門
<property>標(biāo)簽中name屬性和ref屬性的作用是什么?
2.1 DI入門思路分析
基于IOC管理bean
Service中使用new形式創(chuàng)建的Dao對象是否保留?(否)
Service中需要的Dao對象如何進入到Service中?(提供方法)
Service與Dao間的關(guān)系如何描述?(配置)
2.2 實現(xiàn)步驟
【第一步】刪除使用new的形式創(chuàng)建對象的代碼
【第二步】提供依賴對象對應(yīng)的setter方法
【第三步】配置service與dao之間的關(guān)系
2.3 實現(xiàn)代碼
【第一步】刪除使用new的形式創(chuàng)建對象的代碼
public class BookServiceImpl implements BookService { private BookDao bookDao; //【第一步】刪除使用new的形式創(chuàng)建對象的代碼 public void save() { System.out.println("book service save ..."); bookDao.save(); } }
【第二步】提供依賴對象對應(yīng)的setter方法
public class BookServiceImpl implements BookService { private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } //【第二步】提供依賴對象對應(yīng)的setter方法 public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } }
【第三步】配置service與dao之間的關(guān)系
在applicationContext.xml中配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- bean標(biāo)簽:表示配置bean id屬性:表示給bean起名字 class屬性:表示給bean定義類型 --> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <!--配置server與dao的關(guān)系 property標(biāo)簽:表示配置當(dāng)前bean的屬性 name屬性:表示配置哪一個具體的屬性 ref屬性:表示參照哪一個bean --> <property name="bookDao" ref="bookDao"/> </bean> </beans>
2.4 圖解演示
到此這篇關(guān)于淺談一下Spring的核心基礎(chǔ)IOC與DI的文章就介紹到這了,更多相關(guān)Spring的核心基礎(chǔ)IOC與DI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決 Java 中的 IndexOutOfBoundsException 異
當(dāng)我們在 Java 中使用 List 的時候,有時候會出現(xiàn)向 List 中不存在的位置設(shè)置新元素的情況,從而導(dǎo)致 IndexOutOfBoundsException 異常,本文將會介紹這個問題的產(chǎn)生原因以及解決方案2023-10-10Spring?MVC策略模式之MethodArgumentResolver源碼解析
這篇文章主要為大家介紹了Spring?MVC策略模式之MethodArgumentResolver源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu)
這篇文章主要介紹了學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu),函數(shù)式編程語言包含多個系列的常見函數(shù)。但開發(fā)人員有時很難在語言之間進行切換,因為熟悉的函數(shù)具有不熟悉的名稱。函數(shù)式語言傾向于基于函數(shù)范例來命名這些常見函數(shù)。,需要的朋友可以參考下2019-06-06javaweb啟動時啟動socket服務(wù)端代碼實現(xiàn)
這篇文章主要介紹了javaweb啟動時啟動socket服務(wù)端代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11