国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring學(xué)習(xí)筆記(二)Spring的控制反轉(zhuǎn)(設(shè)計(jì)原則)與依賴注入(設(shè)計(jì)模式)

這篇具有很好參考價值的文章主要介紹了Spring學(xué)習(xí)筆記(二)Spring的控制反轉(zhuǎn)(設(shè)計(jì)原則)與依賴注入(設(shè)計(jì)模式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、控制反轉(zhuǎn):縮寫IoC

是一種設(shè)計(jì)原則,降低程序代碼之間的耦合度

對象由Ioc容器統(tǒng)一管理,當(dāng)程序需要使用對象時直接從IoC容器中獲取。這樣對象的控制權(quán)就從應(yīng)用程序轉(zhuǎn)移到了IoC容器

二、依賴注入:縮寫DI

依賴注入是一種消除類之間依賴關(guān)系的設(shè)計(jì)模式。例如,A類要依賴B類,A類不再直接創(chuàng)建B類,而是把這種依賴關(guān)系配置在外部xml文件(或java config文件)中,然后由Spring容器根據(jù)配置信息創(chuàng)建、管理bean類。可以簡單的理解為給對象賦值

兩種實(shí)現(xiàn)方式:

1、構(gòu)造方法注入(非主流了解即可)

Spring容器調(diào)用構(gòu)造方法注入被依賴的實(shí)例,構(gòu)造方法可以是有參的或者是無參的。Spring在讀取配置信息后,會通過反射方式調(diào)用實(shí)例的構(gòu)造方法,如果是有參構(gòu)造方法,可以在構(gòu)造方法中傳入所需的參數(shù)值,最后創(chuàng)建類對象。

步驟:

編寫用戶類User類,在User類中定義id、name和password三個屬性

創(chuàng)建applicationContext-User.xml文件,在該文件中添加User類的配置信息

編寫測試類:創(chuàng)建測試類TestUser,用于測試依賴注入的結(jié)果

編寫用戶類User類

public class User {   
private int id;   private String name;   private String password;  
 public User(int id, String name, String password){  
     this.id=id;	this.name=name;       this.password=password; }   
public String toString(){      
 return "id="+id+",name="+name+",password="+password;   }} 

配置信息中使用到<constructor-arg>元素

具體介紹如下:

一個<constructor-arg>元素表示構(gòu)造方法的一個參數(shù),且定義時不區(qū)分順序,只需要通過<constructor-arg>元素的name屬性指定參數(shù)即可。<constructor-arg>元素還提供了type屬性類指定參數(shù)的類型,避免字符串和基本數(shù)據(jù)類型的混淆。

例如:

<bean id="user" class="com.itheima.User">

??????? <constructor-arg name="id" value="1">

??????? </constructor-arg>

??????? <constructor-arg name="name" value="張三">

??????? </constructor-arg>

??????? <constructor-arg name="password" value="123"></constructor-arg>

</bean>

測試類代碼

public class TestUser {

??? public static void main(String[] args)throws Exception{

?????? ?//加載applicationContext.xml配置

??????? ApplicationContext applicationContext=new

??????? ClassPathXmlApplicationContext("applicationContext-User.xml");

?????? ?//獲取配置中的User實(shí)例

??????? User user=( User)applicationContext.getBean("user");

??????? System.out.println(user);

??? }

}

2、屬性setter方法注入(主流注入方法)

步驟

編寫用戶類User類,在User類中定義id、name和password三個屬性并且注明setter方法

創(chuàng)建applicationContext-User.xml文件,在該文件中添加User類的配置信息

編寫測試類:創(chuàng)建測試類TestUser,用于測試依賴注入的結(jié)果

?編寫用戶類User類

public class User {   
 private int id;  
 private String name;  
 private String password;   
public void setId(Integer id){
	this.id=id;
}   
public void setUsername(String username){
	this.username= username;
}  
 public void setPassword (String password){
	this. password = password;
} 
  public String toString(){       
return "id="+id+",name="+name+",password="+password;   }
}

創(chuàng)建applicationContext-User.xml文件,在該文件中添加User類的配置信息,

在類中注明setter方法,在配置文件中使用property(屬性的意思)元素

<bean id="user" class="com.itheima.User">     
 <property name="id" value="2"></property>     
<property name="name" value="李四"></property>     
<property name="password" value="456"></property> 
</bean>

property屬性使用

name的屬性值準(zhǔn)確的講不是屬性名,而是set方法去掉set關(guān)鍵字后的名字

屬性名idàsetter方法setIdd();去掉關(guān)鍵字setà即idd(駝峰命名)

測試類:

public class TestUser {

??? public static void main(String[] args)throws Exception{

?????? ?//加載applicationContext.xml配置

??????? ApplicationContext applicationContext=new

??????? ClassPathXmlApplicationContext("applicationContext-User.xml");

?????? ?//獲取配置中的User實(shí)例

??????? User user=( User)applicationContext.getBean("user");

??????? System.out.println(user);

??? }

}

三、依賴注入和控制反轉(zhuǎn)的比較

依賴注入(DI)和控制反轉(zhuǎn)(IoC)是從不同角度來描述了同一件事情

依賴注入是從應(yīng)用程序的角度描述,即應(yīng)用程序依賴IoC容器創(chuàng)建并注入它所需要的外部資源;而控制反轉(zhuǎn)是從IoC容器的角度描述,即IoC容器控制應(yīng)用程序,由IoC容器反向地向應(yīng)用程序注入應(yīng)用程序所需要的外部資源。這里所說的外部資源可以是外部實(shí)例對象,也可以是外部文件對象等。

四、對降低程序代碼之間的耦合度的解釋:

在傳統(tǒng)模式中如果使用一個類,自然的做法是創(chuàng)建一個類的實(shí)例:

class Player{?

??? Weapon weapon;?

??? Player(){?

??????? // 與 Sword類緊密耦合

??????? this.weapon = new Sword();?

??? }?

??? public void attack() {

??????? weapon.attack();
??? }

}??

這個方法存在耦合太緊的問題,例如,玩家的武器只能是劍Sword而不能把Sword替換成槍Gun。要把Sword改為Gun,所有涉及到的代碼都要修改,當(dāng)然在代碼規(guī)模小的時候這根本就不是什么問題,但代碼規(guī)模很大時,就會費(fèi)時費(fèi)力了。

運(yùn)用依賴注入的方式降低耦合的示例:

class Player{?
??? Weapon weapon;?
??? // weapon 被注入進(jìn)來

??? Player(Weapon weapon){?
??????? this.weapon = weapon;?
??? }?

??? public void attack() {

??????? weapon.attack();

??? }
??? public void setWeapon(Weapon weapon){?

??????? this.weapon = weapon;?
??? }?
}??

如上所示,Weapon類的實(shí)例并不在代碼中創(chuàng)建,而是外部通過構(gòu)造函數(shù)傳入,傳入類型是父類Weapon,所以傳入的對象類型可以是任何Weapon子類。

傳入哪個子類,可以在外部xml文件(或者java config文件)中配置,Spring容器根據(jù)配置信息創(chuàng)建所需子類實(shí)例,并注入Player類中,如下所示:

??? <bean id="player" class="com.Springyx.demo.Player">

??????? <construct-arg ref="weapon"/>

??? </bean>

????

??? <bean id="weapon" class=" com.Springyx.demo.Gun">

??? </bean>

上面代碼中<construct-arg ref="weapon"/>?ref指向id="weapon"的bean,傳入的武器類型是Gun,如果想改為Sword,可以作如下修改:

??? <bean id="weapon" class=" com.Springyx.demo.Sword">

??? </bean>

只需修改這一處配置就可以。

注意:松耦合,并不是不要耦合。A類依賴B類,A類和B類之間存在緊密耦合,如果把依賴關(guān)系變?yōu)锳類依賴B的父類B0類,在A類與B0類的依賴關(guān)系下,A類可使用B0類的任意子類,A類與B0類的子類之間的依賴關(guān)系是松耦合的(即創(chuàng)建中間商)文章來源地址http://www.zghlxwxcb.cn/news/detail-827742.html

到了這里,關(guān)于Spring學(xué)習(xí)筆記(二)Spring的控制反轉(zhuǎn)(設(shè)計(jì)原則)與依賴注入(設(shè)計(jì)模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入理解 Spring IoC 和 DI:掌握控制反轉(zhuǎn)和依賴注入的精髓

    在本文中,我們將介紹 IoC (控制反轉(zhuǎn))和 DI (依賴注入)的概念,以及如何在 Spring 框架中實(shí)現(xiàn)它們。 控制反轉(zhuǎn)是軟件工程中的一個原則,它將對象或程序的某些部分的控制權(quán)轉(zhuǎn)移給容器或框架。我們最常在面向?qū)ο缶幊痰纳舷挛闹惺褂盟?與傳統(tǒng)編程相比,傳統(tǒng)編程中我

    2024年02月04日
    瀏覽(29)
  • Spring入門&控制反轉(zhuǎn)(或依賴注入)&AOP的關(guān)鍵概念& 多配置文件&與web集成

    目錄 1. 什么是spring,它能夠做什么? 2. 什么是控制反轉(zhuǎn)(或依賴注入) 3. AOP的關(guān)鍵概念 4. 示例 4.1 創(chuàng)建工程 4.2 pom文件 4.3 spring配置文件 4.4 示例代碼 4.4.1 示例1 4.4.2 示例2 (abstract,parent示例) 4.4.3 使用有參數(shù)構(gòu)造方法創(chuàng)建javaBean 4.4.4 init-method:指定bean的初始化方法 4.4.5 復(fù)雜屬

    2024年02月09日
    瀏覽(24)
  • 【Spring進(jìn)階系列丨第二篇】Spring中的兩大核心技術(shù)IoC(控制反轉(zhuǎn))與DI(依賴注入)

    【Spring進(jìn)階系列丨第二篇】Spring中的兩大核心技術(shù)IoC(控制反轉(zhuǎn))與DI(依賴注入)

    我們都知道Spring 框架主要的優(yōu)勢是在 簡化開發(fā) 和 框架整合 上,至于如何實(shí)現(xiàn)就是我們要學(xué)習(xí)Spring 框架的主要內(nèi)容,今天我們就來一起學(xué)習(xí)Spring中的兩大核心技術(shù)IoC(控制反轉(zhuǎn))與DI(依賴注入)。 以經(jīng)典的三層架構(gòu)MVC作為案例,以前我們都是這么干的,看如下代碼: 按照

    2024年02月05日
    瀏覽(34)
  • Java Spring IoC&DI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性

    Java Spring IoC&DI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性

    ?? 博客主頁:從零開始的-CodeNinja之路 ? 收錄文章:Java Spring IoCDI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性 ??歡迎大家點(diǎn)贊??評論??收藏?文章 我們一下要學(xué)習(xí)的內(nèi)容都是為了實(shí)現(xiàn)?內(nèi)聚低耦合來進(jìn)行的 軟件設(shè)計(jì)原則:?內(nèi)聚低耦合. ?內(nèi)聚指

    2024年04月15日
    瀏覽(23)
  • 從依賴倒置原則到IOC控制反轉(zhuǎn)實(shí)現(xiàn)

    從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(zhuǎn)(Inversion of Control, IoC)再到依賴注入(Dependency Injection, DI)的演進(jìn)過程,我們可以理解為一種逐步抽象和解耦的設(shè)計(jì)思想。這種思想在C#等面向?qū)ο蟮木幊陶Z言中得到了廣泛的應(yīng)用。 首先,讓我們回顧一下依賴倒置原

    2024年04月24日
    瀏覽(26)
  • Spring6-IoC(Inversion of Control)控制反轉(zhuǎn)和DI(Dependency Injection)依賴注入,手動實(shí)現(xiàn)IOC

    Java 反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為 Java 語言的 反射機(jī)制 。簡單來說, 反射機(jī)制指的是程序在運(yùn)行時能夠獲取自身

    2024年02月09日
    瀏覽(43)
  • .NET使用依賴注入,控制反轉(zhuǎn)

    .NET 支持依賴項(xiàng)注入 (DI) 軟件設(shè)計(jì)模式,這是一種在類及其依賴項(xiàng)之間實(shí)現(xiàn) 控制 (IoC) 的反轉(zhuǎn) 的技術(shù) 避免有狀態(tài)的、靜態(tài)類和成員。 通過將應(yīng)用設(shè)計(jì)為改用單一實(shí)例服務(wù),避免創(chuàng)建全局狀態(tài)。 避免在服務(wù)中直接實(shí)例化依賴類。 直接實(shí)例化會將代碼耦合到特定實(shí)現(xiàn)。 不在服務(wù)

    2023年04月16日
    瀏覽(27)
  • PHP依賴注入 與 控制反轉(zhuǎn)詳解

    PHP依賴注入 與 控制反轉(zhuǎn)詳解

    ? 依賴注入 是一種設(shè)計(jì)模式,用于解耦組件之間的依賴關(guān)系。 它的主要思想是通過 將依賴的對象傳遞給調(diào)用方 ,而 不是由調(diào)用方自己創(chuàng)建或管理依賴的對象 。這種方式使得組件的依賴關(guān)系更加靈活,易于維護(hù)和測試。 控制反轉(zhuǎn) 是一個更廣泛的概念,它與依賴注入緊密相

    2024年02月06日
    瀏覽(24)
  • 深入理解WPF中的依賴注入和控制反轉(zhuǎn)

    深入理解WPF中的依賴注入和控制反轉(zhuǎn)

    在WPF開發(fā)中, 依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是程序解耦的關(guān)鍵,在當(dāng)今軟件工程中占有舉足輕重的地位,兩者之間有著密不可分的聯(lián)系 。今天就以一個簡單的小例子,簡述如何在WPF中實(shí)現(xiàn)依賴注入和控制反轉(zhuǎn),僅供學(xué)習(xí)分享使用,如有不足之處

    2024年02月06日
    瀏覽(21)
  • 6.3Java EE——控制反轉(zhuǎn)與依賴注入

    一、控制反轉(zhuǎn)的概念 傳統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)原則 ????????控制反轉(zhuǎn)(Inversion of Control,縮寫為IoC)是面向?qū)ο缶幊讨械囊粋€設(shè)計(jì)原則,用來降低程序代碼之間的耦合度。在傳統(tǒng)面向?qū)ο缶幊讨?,獲取對象的方式是用new主動創(chuàng)建一個對象,也就是說應(yīng)用程序掌握著對

    2024年02月16日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包