淺談一下Spring的核心基礎(chǔ)IOC與DI
一、Spring簡(jiǎn)介
1 Spring介紹
1.1 為什么要學(xué)
Spring技術(shù)是JavaEE開(kāi)發(fā)必備技能,企業(yè)開(kāi)發(fā)技術(shù)選型命中率>90%
專業(yè)角度
簡(jiǎn)化開(kāi)發(fā),降低企業(yè)級(jí)開(kāi)發(fā)的復(fù)雜性框架整合,高效整合其他技術(shù),提高企業(yè)級(jí)應(yīng)用開(kāi)發(fā)與運(yùn)行效率
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FDNH5J13-1677810411916)(assets/image-20210729171139088.png)]](http://img.jbzj.com/file_images/article/202303/202303270907394.png)
1.2 學(xué)什么
簡(jiǎn)化開(kāi)發(fā)
- IOC(反轉(zhuǎn)控制)
- AOP(面向切面編程)
- 事務(wù)處理
框架整合
- MyBatis
- MyBatis-plus
- Struts
- Struts2
- Hibernate……
2 初識(shí)Spring
2.1 Spring家族
官網(wǎng):https://spring.ioSpring發(fā)展到今天已經(jīng)形成了一種開(kāi)發(fā)的生態(tài)圈,Spring提供了若干個(gè)項(xiàng)目,每個(gè)項(xiàng)目用于完成特定的功能。
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BpSEydhD-1677810411917)(assets/image-20210729171850181.png)]](http://img.jbzj.com/file_images/article/202303/202303270907395.jpg)
2.2 Spring發(fā)展史
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-QPSirvHj-1677810411918)(assets/image-20210729171926576.png)]](http://img.jbzj.com/file_images/article/202303/202303270907396.jpg)
注意:現(xiàn)在已經(jīng)有spring6了哦!
3 Spring體系結(jié)構(gòu)
3.1 Spring Framework系統(tǒng)架構(gòu)圖
Spring Framework是Spring生態(tài)圈中最基礎(chǔ)的項(xiàng)目,是其他項(xiàng)目的根基

4 Spring核心概念
問(wèn)題導(dǎo)入
4.1 核心概念
IOC(Inversion of Control)控制反轉(zhuǎn)
使用對(duì)象時(shí),由主動(dòng)new產(chǎn)生對(duì)象轉(zhuǎn)換為由外部提供對(duì)象,此過(guò)程中對(duì)象創(chuàng)建控制權(quán)由程序轉(zhuǎn)移到外部,此思想稱為控制反轉(zhuǎn)。通俗的講就是“將new對(duì)象的權(quán)利交給Spring,我們從Spring中獲取對(duì)象使用即可”
Spring技術(shù)對(duì)IoC思想進(jìn)行了實(shí)現(xiàn)
Spring提供了一個(gè)容器,稱為IOC容器,用來(lái)充當(dāng)IoC思想中的“外部”IOC容器負(fù)責(zé)對(duì)象的創(chuàng)建、初始化等一系列工作,被創(chuàng)建或被管理的對(duì)象在IoC容器中統(tǒng)稱為Bean
DI(Dependency Injection)依賴注入
在容器中建立bean與bean之間的依賴關(guān)系的整個(gè)過(guò)程,稱為依賴注入。
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-x9hRaYAX-1677810411920)(assets/image-20210729174148134.png)]](http://img.jbzj.com/file_images/article/202303/202303270907399.jpg)
目標(biāo):充分解耦
- 使用IoC容器管理bean(IOC)
- 在IoC容器內(nèi)將有依賴關(guān)系的bean進(jìn)行關(guān)系綁定(DI)
最終效果
- 使用對(duì)象時(shí)不僅可以直接從IoC容器中獲取,并且獲取到的bean已經(jīng)綁定了所有的依賴關(guān)系
二、IOC和DI入門
1 IOC入門
問(wèn)題導(dǎo)入
<bean>標(biāo)簽中id屬性和class屬性的作用是什么?
1.1 門案例思路分析
管理什么?(Service與Dao)
如何將被管理的對(duì)象告知IOC容器?(配置文件)
被管理的對(duì)象交給IOC容器,如何獲取到IoC容器?(接口)
IOC容器得到后,如何從容器中獲取bean?(接口方法)
使用Spring導(dǎo)入哪些坐標(biāo)?(pom.xml)
1.2 實(shí)現(xiàn)步驟
【第一步】導(dǎo)入Spring坐標(biāo) 【第二步】定義Spring管理的類(接口) 【第三步】創(chuàng)建Spring配置文件,配置對(duì)應(yīng)類作為Spring管理的bean對(duì)象 【第四步】初始化IOC容器(Spring核心容器/Spring容器),通過(guò)容器獲取bean對(duì)象
1.3 實(shí)現(xiàn)代碼
【第一步】導(dǎo)入Spring坐標(biāo)
<dependencies>
<!--導(dǎo)入spring的坐標(biāo)spring-context,對(duì)應(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實(shí)現(xiàn)類
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
BookService接口和BookServiceImpl實(shí)現(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配置文件,配置對(duì)應(yīng)類作為Spring管理的bean對(duì)象
定義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>
注意事項(xiàng):bean定義時(shí)id屬性在同一個(gè)上下文中(IOC容器中)不能重復(fù)
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通過(guò)容器獲取Bean對(duì)象
public class App {
public static void main(String[] args) {
//1.創(chuàng)建IoC容器對(duì)象,加載spring核心配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 從IOC容器中獲取Bean對(duì)象(BookService對(duì)象)
BookService bookService= (BookService)ctx.getBean("bookService");
//3 調(diào)用Bean對(duì)象(BookService對(duì)象)的方法
bookService.save();
}
}
1.4 運(yùn)行結(jié)果
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-HBvFCnTA-1677810411920)(assets/image-20210729184337603.png)]](http://img.jbzj.com/file_images/article/202303/2023032709074011.png)
2 DI入門
<property>標(biāo)簽中name屬性和ref屬性的作用是什么?
2.1 DI入門思路分析
基于IOC管理bean
Service中使用new形式創(chuàng)建的Dao對(duì)象是否保留?(否)
Service中需要的Dao對(duì)象如何進(jìn)入到Service中?(提供方法)
Service與Dao間的關(guān)系如何描述?(配置)
2.2 實(shí)現(xiàn)步驟
【第一步】刪除使用new的形式創(chuàng)建對(duì)象的代碼
【第二步】提供依賴對(duì)象對(duì)應(yīng)的setter方法
【第三步】配置service與dao之間的關(guān)系
2.3 實(shí)現(xiàn)代碼
【第一步】刪除使用new的形式創(chuàng)建對(duì)象的代碼
public class BookServiceImpl implements BookService {
private BookDao bookDao; //【第一步】刪除使用new的形式創(chuàng)建對(duì)象的代碼
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
【第二步】提供依賴對(duì)象對(duì)應(yīng)的setter方法
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
//【第二步】提供依賴對(duì)象對(duì)應(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屬性:表示配置哪一個(gè)具體的屬性
ref屬性:表示參照哪一個(gè)bean
-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
2.4 圖解演示
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-X6PKpE7n-1677810411920)(assets/image-20210729183104748.png)]](http://img.jbzj.com/file_images/article/202303/2023032709074013.jpg)
到此這篇關(guān)于淺談一下Spring的核心基礎(chǔ)IOC與DI的文章就介紹到這了,更多相關(guān)Spring的核心基礎(chǔ)IOC與DI內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基礎(chǔ)之創(chuàng)建虛擬機(jī)對(duì)象的過(guò)程詳細(xì)總結(jié)
本文基于虛擬機(jī)HotSpot和常用的內(nèi)存區(qū)域Java堆深入對(duì)象分配、布局和訪問(wèn)的全過(guò)程,文中有非常詳細(xì)的圖文解說(shuō),對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測(cè)------lof算法
這篇文章主要介紹了Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測(cè)------lof算法,本文通過(guò)算法概述,算法Java源碼,測(cè)試結(jié)果等方面一一進(jìn)行說(shuō)明,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
SpringSecurity安全框架在SpringBoot框架中的使用詳解
在Spring?Boot框架中,Spring?Security是一個(gè)非常重要的組件,它可以幫助我們實(shí)現(xiàn)應(yīng)用程序的安全性,本文將詳細(xì)介紹Spring?Security在Spring?Boot框架中的使用,包括如何配置Spring?Security、如何實(shí)現(xiàn)身份驗(yàn)證和授權(quán)、如何防止攻擊等2023-06-06
深入理解java異常處理機(jī)制的原理和開(kāi)發(fā)應(yīng)用
Java異常處理機(jī)制在日常開(kāi)發(fā)中應(yīng)用頻繁,本篇文章主要在基礎(chǔ)的使用方法上,更進(jìn)一步的,如何更加合理的使用異常機(jī)制,希望可以對(duì)各位朋友能有所幫助。2017-04-04
Java知識(shí)點(diǎn)歸納 —給Java新手的一些建議(新手必看)
以下簡(jiǎn)單介紹了下我對(duì)于這些java基本知識(shí)點(diǎn)和技術(shù)點(diǎn)的一些看法和心得,這些內(nèi)容都源自于我這些年來(lái)使用java的一些總結(jié)2016-05-05
詳解Java回調(diào)的原理與實(shí)現(xiàn)
回調(diào)函數(shù),顧名思義,用于回調(diào)的函數(shù)?;卣{(diào)函數(shù)只是一個(gè)功能片段,由用戶按照回調(diào)函數(shù)調(diào)用約定來(lái)實(shí)現(xiàn)的一個(gè)函數(shù)?;卣{(diào)函數(shù)是一個(gè)工作流的一部分,由工作流來(lái)決定函數(shù)的調(diào)用(回調(diào))時(shí)機(jī)。2017-03-03
SpringBoot事件發(fā)布和監(jiān)聽(tīng)詳解
今天去官網(wǎng)查看spring boot資料時(shí),在特性中看見(jiàn)了系統(tǒng)的事件及監(jiān)聽(tīng)章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽(tīng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11
SpringBoot Redis緩存數(shù)據(jù)實(shí)現(xiàn)解析
這篇文章主要介紹了SpringBoot Redis緩存數(shù)據(jù)實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01

