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

【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件

這篇具有很好參考價值的文章主要介紹了【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


歡迎大家回到《 Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現(xiàn),如果您對Maven還很陌生,請移步本人的博文《 如何在windows11下安裝Maven并配置以及 IDEA配置Maven環(huán)境》,本文的上一篇為《 全面深入詳解IOC/DI注解開發(fā)》

【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
Spring為了使用注解簡化開發(fā),并沒有提供構(gòu)造函數(shù)注入、setter注入對應(yīng)的注解,只提供了自動裝配的注解實現(xiàn)。

1 環(huán)境準(zhǔn)備

在學(xué)習(xí)之前,把案例環(huán)境介紹下:

  • 創(chuàng)建一個Maven項目
  • pom.xml添加Spring的依賴
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>
  • 添加一個配置類SpringConfig
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}
  • 添加BookDao、BookDaoImpl、BookService、BookServiceImpl類
public interface BookDao {
	public void save();
}
@Repository
public class BookDaoImpl implements BookDao {
	public void save() {
		System.out.println("book dao save ..." );
	}
}
public interface BookService {
	public void save();
}
@Service
public class BookServiceImpl implements BookService {
	private BookDao bookDao;
	public void setBookDao(BookDao bookDao) {
		this.bookDao = bookDao;
	}
	public void save() {
		System.out.println("book service save ...");
		bookDao.save();
	}
}
  • 創(chuàng)建運行類App
public class App {
	public static void main(String[] args) {
	AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
		BookService bookService = ctx.getBean(BookService.class);
		bookService.save();
	}
}

最終創(chuàng)建好的項目結(jié)構(gòu)如下:
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
環(huán)境準(zhǔn)備好后,運行后會發(fā)現(xiàn)有問題:
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
出現(xiàn)問題的原因是,在BookServiceImpl類中添加了BookDao的屬性,并提供了setter方法,但是目前是沒有提供配置注入BookDao的,所以bookDao對象為Null,調(diào)用其save方法就會報控指針異常。

2 注解實現(xiàn)按照類型注入

對于這個問題使用注解該如何解決?
(1) 在BookServiceImpl類的bookDao屬性上添加@Autowired注解

@Service
public class BookServiceImpl implements BookService {
	@Autowired
	private BookDao bookDao;
	// public void setBookDao(BookDao bookDao) {
	// this.bookDao = bookDao;
	// }
	public void save() {
		System.out.println("book service save ...");
		bookDao.save();
	}
}

注意:

  • @Autowired可以寫在屬性上,也可也寫在setter方法上,最簡單的處理方式是寫在屬性上并將setter方法刪除掉
  • 為什么setter方法可以刪除呢?
    • 自動裝配基于反射設(shè)計創(chuàng)建對象并通過暴力反射為私有屬性進行設(shè)值
    • 普通反射只能獲取public修飾的內(nèi)容
    • 暴力反射除了獲取public修飾的內(nèi)容還可以獲取private修改的內(nèi)容
    • 所以此處無需提供setter方法

(2)@Autowired是按照類型注入,那么對應(yīng)BookDao接口如果有多個實現(xiàn)類,比如添加
BookDaoImpl2

@Repository
public class BookDaoImpl2 implements BookDao {
	 public void save() {
		System.out.println("book dao save ...2");
	 }
}

這個時候再次運行App,就會報錯
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
此時,按照類型注入就無法區(qū)分到底注入哪個對象,解決方案:按照名稱注入

  • 先給兩個Dao類分別起個名稱
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
	public void save() {
		System.out.println("book dao save ..." );
	}
}
@Repository("bookDao2")
public class BookDaoImpl2 implements BookDao {
	public void save() {
		System.out.println("book dao save ...2" );
	}
}
  • 此時就可以注入成功,但是得思考以下幾個問題:
    • @Autowired是按照類型注入的,給BookDao的兩個實現(xiàn)起了名稱,它還是有兩個bean對象,為什么不報錯?
    • @Autowired默認(rèn)按照類型自動裝配,如果IOC容器中同類的Bean找到多個,就按照變量名和Bean的名稱匹配。因為變量名叫bookDao而容器中也有一個booDao,所以可以成功注入。
    • 分析下面這種情況是否能完成注入呢?
      【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
    • 不行,因為按照類型會找到多個bean對象,此時會按照bookDao名稱去找,因為IOC容器只有名稱叫bookDao1和bookDao2 ,所以找不到,會報NoUniqueBeanDefinitionException

3 注解實現(xiàn)按照名稱注入

當(dāng)根據(jù)類型在容器中找到多個bean,注入?yún)?shù)的屬性名又和容器中bean的名稱不一致,這個時候該如何解決,就需要使用到@Qualifier來指定注入哪個名稱的bean對象。

@Service
public class BookServiceImpl implements BookService {
	@Autowired
	@Qualifier("bookDao1")
	private BookDao bookDao;
	public void save() {
		System.out.println("book service save ...");
		bookDao.save();
	}
}

@Qualifier注解后的值就是需要注入的bean的名稱。
注意:@Qualifier不能獨立使用,必須和@Autowired一起使用

4 簡單數(shù)據(jù)類型注入

引用類型看完,簡單類型注入就比較容易懂了。簡單類型注入的是基本數(shù)據(jù)類型或者字符串類型,下面在BookDaoImpl類中添加一個name屬性,用其進行簡單類型注入

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
	private String name;
	public void save() {
		System.out.println("book dao save ..." + name);
	}
}

數(shù)據(jù)類型換了,對應(yīng)的注解也要跟著換,這次使用@Value注解,將值寫入注解的參數(shù)中就行了

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
	@Value("itheima")
	private String name;
	public void save() {
		System.out.println("book dao save ..." + name);
	}
}

注意數(shù)據(jù)格式要匹配,如將"abc"注入給int值,這樣程序就會報錯。

介紹完后,會有一種感覺就是這個注解好像沒什么用,跟直接賦值是一個效果,還沒有直接賦值簡單,所以這個注解存在的意義是什么?

5 注解讀取properties配置文件

@Value一般會被用在從properties配置文件中讀取內(nèi)容進行使用,具體如何實現(xiàn)?
步驟1:resource下準(zhǔn)備properties文件
jdbc.properties

name=itheima888

步驟2: 使用注解加載properties配置文件

在配置類上添加@PropertySource注解

@Configuration
@ComponentScan("com.itheima")
@PropertySource("jdbc.properties")
public class SpringConfig {
}

步驟3:使用@Value讀取配置文件中的內(nèi)容

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
	@Value("${name}")
	private String name;
	public void save() {
		System.out.println("book dao save ..." + name);
	}
}

步驟4:運行程序
運行App類,查看運行結(jié)果,說明配置文件中的內(nèi)容已經(jīng)被加載到
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
注意:

  • 如果讀取的properties配置文件有多個,可以使用@PropertySource的屬性來指定多個
@PropertySource({"jdbc.properties","xxx.properties"})
  • @PropertySource注解屬性中不支持使用通配符*,運行會報錯
@PropertySource({"*.properties"})
  • @PropertySource注解屬性中可以把classpath:加上,代表從當(dāng)前項目的根路徑找文件
@PropertySource({"classpath:jdbc.properties"})

6 知識點總結(jié)

知識點1:@Autowired
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
知識點2:@Qualifier
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
知識點3:@Value
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端
知識點4:@PropertySource
【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件,# SSM與SpringBoot教程,Java教程,spring,java,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-758127.html

到了這里,關(guān)于【Spring教程十】Spring框架實戰(zhàn):全面深入詳解IOC/DI之--純注解開發(fā)模式下的依賴注入&&注解讀取properties配置文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring框架中IOC和DI詳解

    Spring框架中IOC和DI詳解

    來源黑馬Spring課程,覺得挺好的 1、為什么要學(xué)習(xí)spring? 如果讓本人用一句話去回答這個問題,那么我只能說:在J2EE的學(xué)習(xí)之路上,spring給我?guī)砹碎_發(fā)的春天,讓我們從JSP、sevlet的高耦合的開發(fā)中徹底的解救出來。 spring是目前最主流的框架 spring是學(xué)習(xí)后面課程(比如:

    2023年04月15日
    瀏覽(23)
  • 【Spring篇】IOC/DI注解開發(fā)

    【Spring篇】IOC/DI注解開發(fā)

    ??系列專欄:Spring系列專欄 ??個人主頁:個人主頁 目錄 一、IOC/DI注解開發(fā) 1.注解開發(fā)定義bean? 2.純注解開發(fā)模式 1.思路分析 2.實現(xiàn)步驟 3.注解開發(fā)bean作用范圍與生命周期管理 1.環(huán)境準(zhǔn)備 2.Bean的作用范圍 3.Bean的生命周期 4.注解開發(fā)依賴注入 1.環(huán)境準(zhǔn)備 2.注解實現(xiàn)按照類型注入

    2024年02月03日
    瀏覽(32)
  • 淺談 Spring IOC 和 DI 以及 Spring 整合 Mybatis 的十四 個注解

    淺談 Spring IOC 和 DI 以及 Spring 整合 Mybatis 的十四 個注解

    控制 : 指對對象的創(chuàng)建權(quán) 反轉(zhuǎn): 對象的創(chuàng)建由程序員在類中主動創(chuàng)建變?yōu)橛蒘pring自動創(chuàng)建 Spring方式:所有的對象都是由Spring框架提前創(chuàng)建出來,存儲到一個容器中,servlet需要Service了,就向Spring要一個 技術(shù)的作用 : 通過底層反射原理來 解開對象之間的耦合 注解 @Compone

    2024年02月16日
    瀏覽(50)
  • 【Spring教程21】Spring框架實戰(zhàn):Spring事務(wù)簡介、AOP事務(wù)管理、代碼示例全面詳解

    【Spring教程21】Spring框架實戰(zhàn):Spring事務(wù)簡介、AOP事務(wù)管理、代碼示例全面詳解

    歡迎大家回到《Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現(xiàn),如果您對Maven還很陌生,請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環(huán)境》,本文的上一篇為《AOP(面對切面編程)知識總結(jié)》 事務(wù)作用:在數(shù)據(jù)層保障一系列的數(shù)據(jù)庫

    2024年02月04日
    瀏覽(53)
  • 【Spring教程29】Spring框架實戰(zhàn):從零開始學(xué)習(xí)SpringMVC 之 服務(wù)器響應(yīng)知識全面詳解

    【Spring教程29】Spring框架實戰(zhàn):從零開始學(xué)習(xí)SpringMVC 之 服務(wù)器響應(yīng)知識全面詳解

    歡迎大家回到《Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現(xiàn),如果您對Maven還很陌生,請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環(huán)境》,本文的上一篇為《SpringMVC 之 請求與請求參數(shù)詳解》 上一節(jié)我們說了SpringMvc請求知識,這一節(jié)

    2024年02月03日
    瀏覽(32)
  • Spring框架IOC容器和DI依賴注入

    IOC(Invertion Of Control):控制反轉(zhuǎn),使用對象時,由使用new創(chuàng)建對象轉(zhuǎn)變?yōu)橛赏獠刻峁ο?此過程中對象的創(chuàng)建控制權(quán)由程序轉(zhuǎn)移到外部的思想稱之為控制反轉(zhuǎn). DI(Dependency Injection):依賴注入,在容器中建立bean與bean之間的關(guān)系的過程,稱之為依賴注入 pom.xml依賴引入 BookDao BookDaoImpl Book

    2023年04月09日
    瀏覽(25)
  • 【Spring框架三】——Spirng IOC和DI的實現(xiàn)

    【Spring框架三】——Spirng IOC和DI的實現(xiàn)

    【Spring框架一】——Spring框架簡介 本篇博客主要總結(jié)的是以Spring 5為例,通過XML方式和注解的方式分別實現(xiàn)IOC和DI。并使用Spring5 進行基礎(chǔ)運用。 創(chuàng)建Maven項目:使用IDE創(chuàng)建一個maven項目 添加Spring依賴:在Maven配置文件pom.xml中添加Spring框架的依賴項 這樣Spring的基礎(chǔ)環(huán)境已經(jīng)搭

    2024年02月05日
    瀏覽(51)
  • 深入理解 Spring IoC 和 DI:掌握控制反轉(zhuǎn)和依賴注入的精髓

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

    2024年02月04日
    瀏覽(29)
  • 理解SpringIOC和DI第一課(Spring的特點),IOC對應(yīng)五大注解,ApplicationContext vs BeanFactory

    理解SpringIOC和DI第一課(Spring的特點),IOC對應(yīng)五大注解,ApplicationContext vs BeanFactory

    對象這個詞在Spring范圍內(nèi),稱為bean Spring兩大核心思想 1.IOC ? ? (IOC是控制反轉(zhuǎn),意思是 控制權(quán)反轉(zhuǎn)-控制權(quán)(正常是誰用這個對象,誰去創(chuàng)建,)-控制對象的控制權(quán),反轉(zhuǎn)的意思是創(chuàng)建對象的控制權(quán),交給了Spring) 優(yōu)點:解耦合 高內(nèi)聚:一個模塊內(nèi)部的關(guān)系 低耦合:各個模

    2024年02月04日
    瀏覽(17)
  • 【Spring進階系列丨第三篇】Spring核心技術(shù)之 IoC 與 DI 實戰(zhàn)案例

    【Spring進階系列丨第三篇】Spring核心技術(shù)之 IoC 與 DI 實戰(zhàn)案例

    在上一篇文章中,我們學(xué)習(xí)了IoC與DI的相關(guān)概念與原理,現(xiàn)在讓我們 以HelloWorld為例,編寫一個程序,讓創(chuàng)建對象的工作由Spring幫助我們創(chuàng)建。 一同感受一下Spring框架帶給我們開發(fā)的便捷性。 這種做法是以前最常用的做法,HelloWorld這個類的對象是我們程序員自己去創(chuàng)建并為屬

    2024年02月05日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包