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

Spring-2-深入理解Spring 注解依賴注入(DI):簡(jiǎn)化Java應(yīng)用程序開發(fā)

這篇具有很好參考價(jià)值的文章主要介紹了Spring-2-深入理解Spring 注解依賴注入(DI):簡(jiǎn)化Java應(yīng)用程序開發(fā)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

今日目標(biāo)

?

掌握純注解開發(fā)依賴注入(DI)模式

學(xué)習(xí)使用純注解進(jìn)行第三方Bean注入

1 注解開發(fā)依賴注入(DI)【重點(diǎn)】

問題導(dǎo)入

思考:如何使用注解方式將Bean對(duì)象注入到類中

1.1 使用@Autowired注解開啟自動(dòng)裝配模式(按類型)

@Service
public?class?StudentServiceImpl?implements?StudentService?{

????//創(chuàng)建成員對(duì)象
????//@Autowired:注入引用類型,自動(dòng)裝配模式,默認(rèn)按類型裝配
????@Autowired
????private?StudentDao?studentDao?;

????@Override
????public?void?save()?{
????????System.out.println("Service:?添加學(xué)生信息到數(shù)據(jù)庫(kù)...");
????????studentDao.save();
????}
}

說明:不管是使用配置文件還是配置類,都必須進(jìn)行對(duì)應(yīng)的Spring注解包掃描才可以使用。@Autowired默認(rèn)按照類型自動(dòng)裝配,如果IoC容器中同類的Bean有多個(gè),那么默認(rèn)按照變量名和Bean的名稱匹配,建議使用@Qualifier注解指定要裝配的bean名稱

注意:自動(dòng)裝配基于反射設(shè)計(jì)創(chuàng)建對(duì)象并暴力反射對(duì)應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無需提供setter方法。

1.2 使用@Qualifier注解指定要裝配的bean名稱

目的:解決IoC容器中同類型Bean有多個(gè)裝配哪一個(gè)的問題

@Service
public?class?StudentServiceImpl?implements?StudentService?{

????//創(chuàng)建成員對(duì)象
????//@Autowired:注入引用類型,自動(dòng)裝配模式,默認(rèn)按類型裝配
????@Autowired
????//@Qualifier:自動(dòng)裝配bean時(shí)按bean名稱裝配
????@Qualifier("studentDaoImpl")
????private?StudentDao?studentDao?;

????@Override
????public?void?save()?{
????????System.out.println("Service:?添加學(xué)生信息到數(shù)據(jù)庫(kù)...");
????????studentDao.save();
????}
}

注意:@Qualifier注解無法單獨(dú)使用,必須配合@Autowired注解使用

1.3 使用@Value實(shí)現(xiàn)簡(jiǎn)單類型注入

@Repository
public?class?StudentDaoImpl?implements?StudentDao?{

????//@Value:注入簡(jiǎn)單類型(無需提供set方法)
????@Value("${test.name}")
????private?String?name;
????@Override
????public?void?save()?{
????????System.out.println("DAO:?name=?"+name);
????????System.out.println("DAO:?添加學(xué)生信息到數(shù)據(jù)庫(kù)...");
????}
}

以上@Value注解中使用${test.name}從屬性文件中讀取test.name值,那么就需要在配置類或者配置文件中加載屬性文件。

@Configuration
@ComponentScan("com.itheima")
//@PropertySource加載properties配置文件
@PropertySource("classpath:test.properties")?//如果是多個(gè)屬性文件,則使用{}數(shù)組
public?class?SpringConfig?{
}

注意:@PropertySource中加載多文件請(qǐng)使用數(shù)組格式配置,不允許使用通配符*

2 注解開發(fā)管理第三方Bean【重點(diǎn)】

問題導(dǎo)入

思考:導(dǎo)入自己定義的配置類有幾種方式?

【第零步】pom.xml添加數(shù)據(jù)庫(kù)依賴

<!--?mysql?驅(qū)動(dòng)-->
<dependency>
????<groupId>mysql</groupId>
????<artifactId>mysql-connector-java</artifactId>
????<version>8.0.30</version>
</dependency>
<!--druid包-->
<dependency>
????<groupId>com.alibaba</groupId>
????<artifactId>druid</artifactId>
????<version>1.2.18</version>
</dependency>

【第一步】單獨(dú)定義配置類在config包下創(chuàng)建

package?com.zbbmeta.config;

import?com.alibaba.druid.pool.DruidDataSource;
import?org.springframework.context.annotation.Bean;

import?javax.sql.DataSource;

public?class?JdbcConfig?{
????//@Bean:表示當(dāng)前方法的返回值是一個(gè)bean對(duì)象,添加到IOC容器中
????@Bean
????public?DataSource?dataSource(){
????????DruidDataSource?ds?=?new?DruidDataSource();
????????ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
????????ds.setUrl("jdbc:mysql://localhost:3306/spring_druid");
????????ds.setUsername("root");
????????ds.setPassword("root");
????????return?ds;
????}
}

【第二步】將獨(dú)立的配置類加入核心配置

方式1:@Import注解導(dǎo)入式
@Configuration?//?指定這個(gè)類為配置類,替代application.xml
@ComponentScan("com.zbbmeta")//代替<context:component-scan?base-package="com.zbbmeta"?/>
@PropertySource("classpath:test.properties")?//如果是多個(gè)屬性文件,則使用{}數(shù)組
@Import(JdbcConfig.class)??//加載JdbcConfig配置類
public?class?SpringConfig?{


}

方式2:@ComponentScan掃描式
  • JdbcConfig類上添加注解

@Configuration
public?class?JdbcConfig?{
????//@Bean:表示當(dāng)前方法的返回值是一個(gè)bean對(duì)象,添加到IOC容器中
????@Bean
????public?DataSource?dataSource(){
????????DruidDataSource?ds?=?new?DruidDataSource();
????????ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
????????ds.setUrl("jdbc:mysql://localhost:3306/spring_druid");
????????ds.setUsername("root");
????????ds.setPassword("root");
????????return?ds;
????}
}
  • SpringConfig配置不變

@Configuration?//?指定這個(gè)類為配置類,替代application.xml
@ComponentScan("com.zbbmeta")//代替<context:component-scan?base-package="com.zbbmeta"?/>
@PropertySource("classpath:test.properties")?//如果是多個(gè)屬性文件,則使用{}數(shù)組
//@Import(JdbcConfig.class)??//加載JdbcConfig配置類
public?class?SpringConfig?{

}

3 注解開發(fā)為第三方Bean注入資源【重點(diǎn)】

問題導(dǎo)入

思考:配置類中如何注入簡(jiǎn)單類型數(shù)據(jù),如何注入引用類型數(shù)據(jù)?

3.1 簡(jiǎn)單類型依賴注入

public?class?JdbcConfig?{
????
????@Value("com.mysql.jdbc.Driver")
????private?String?driver;
????@Value("jdbc:mysql://localhost:3306/spring_db")
????private?String?url;
????@Value("root")
????private?String?userName;
????@Value("root")
????private?String?password;
????
????//1.定義一個(gè)方法獲得要管理的對(duì)象
????//2.@Bean:表示當(dāng)前方法的返回值是一個(gè)bean對(duì)象,添加到IOC容器中
????@Bean
????public?DataSource?dataSource(){
????????DruidDataSource?ds?=?new?DruidDataSource();
????????ds.setDriverClassName(driver);
????????ds.setUrl(url);
????????ds.setUsername(userName);
????????ds.setPassword(password);
????????return?ds;
????}
}

說明:如果@Value()中使用了EL表達(dá)式讀取properties屬性文件中的內(nèi)容,那么就需要加載properties屬性文件。

3.2 引用類型依賴注入

//Spring會(huì)自動(dòng)從IOC容器中根據(jù)類型找到StudentDao對(duì)象賦值給參數(shù)studentDao變量,如果沒有就會(huì)報(bào)錯(cuò)。
????@Bean
????public?DataSource?dataSource(StudentDao?studentDao){
????????System.out.println("JdbcConfig??studentDao?=?"?+?studentDao);
????????DruidDataSource?ds?=?new?DruidDataSource();
????????ds.setDriverClassName(driver);
????????ds.setUrl(url);
????????ds.setUsername(userName);
????????ds.setPassword(password);
????????return?ds;
????}

注意:引用類型注入只需要為bean定義方法設(shè)置形參即可,容器會(huì)根據(jù)類型自動(dòng)裝配對(duì)象

3.3 測(cè)試類

????@Test
????public?void?testDatasource()?throws?SQLException?{

????????//目標(biāo):從IOC容器中獲取德魯伊連接池對(duì)象
????????//1.AnnotationConfigApplicationContext加載Spring配置類初始化Spring容器
????????AnnotationConfigApplicationContext?ac?=?new?AnnotationConfigApplicationContext(SpringConfig.class);
????????//按類型獲取bean
????????DataSource?dataSource?=?ac.getBean(DataSource.class);
????????Connection?connection?=?dataSource.getConnection();
????????//3.打印對(duì)象
????????System.out.println("連接池對(duì)象:"+dataSource);
????????System.out.println("連接象地址:"+connection);
????????//4.關(guān)閉容器
????????ac.close();
????}

3.4 注解開發(fā)總結(jié)

Spring-2-深入理解Spring 注解依賴注入(DI):簡(jiǎn)化Java應(yīng)用程序開發(fā),JavaWeb,java,spring,DI,注解,依賴注入

Spring-2-深入理解Spring 注解依賴注入(DI):簡(jiǎn)化Java應(yīng)用程序開發(fā),JavaWeb,java,spring,DI,注解,依賴注入文章來源地址http://www.zghlxwxcb.cn/news/detail-633537.html

到了這里,關(guān)于Spring-2-深入理解Spring 注解依賴注入(DI):簡(jiǎn)化Java應(yīng)用程序開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring高手之路1——深入理解與實(shí)現(xiàn)IOC依賴查找與依賴注入

    Spring高手之路1——深入理解與實(shí)現(xiàn)IOC依賴查找與依賴注入

    本文從 xml 開始講解,注解后面給出 ??首先,我們需要明白什么是 IOC (控制反轉(zhuǎn))和依賴查找。在 Spring Framework 中,控制反轉(zhuǎn)是一種設(shè)計(jì)模式,可以幫助我們解耦模塊間的關(guān)系,這樣我們就可以把注意力更多地集中在核心的業(yè)務(wù)邏輯上,而不是在對(duì)象的創(chuàng)建和管理上。 ?

    2024年02月09日
    瀏覽(28)
  • 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)贊??評(píng)論??收藏?文章 我們一下要學(xué)習(xí)的內(nèi)容都是為了實(shí)現(xiàn)?內(nèi)聚低耦合來進(jìn)行的 軟件設(shè)計(jì)原則:?內(nèi)聚低耦合. ?內(nèi)聚指

    2024年04月15日
    瀏覽(23)
  • Spring DI簡(jiǎn)介及依賴注入方式和依賴注入類型

    Spring DI簡(jiǎn)介及依賴注入方式和依賴注入類型

    目錄 一、什么是依賴注入 二、依賴注入方式 1. Setter注入 2. 構(gòu)造方法注入 3. 自動(dòng)注入? 三、依賴注入類型 1. 注入bean類型 2. 注入基本數(shù)據(jù)類型 3. 注入List集合 4. 注入Set集合 5. 注入Map集合 6. 注入Properties對(duì)象 往期專欄文章相關(guān)導(dǎo)讀? 1. Maven系列專欄文章 2. Mybatis系列專欄文章

    2024年02月02日
    瀏覽(22)
  • Spring《三》DI 依賴注入

    Spring《三》DI 依賴注入

    ??道阻且長(zhǎng),行則將至。?? 上一篇:Spring《二》bean 的實(shí)例化與生命周期 下一篇:敬請(qǐng)期待 向一個(gè)類中傳遞數(shù)據(jù)的方式有: 普通方法(set 方法) 和 構(gòu)造方法 。Spring 就相對(duì)應(yīng)地為我們提供了兩種注入方式: setter 注入 和 構(gòu)造器注入 。同時(shí)也包括簡(jiǎn)單類型和引用類型(對(duì)象

    2023年04月21日
    瀏覽(22)
  • Spring之DI(依賴注入)

    Spring之DI(依賴注入)

    依賴注入(DI)是一個(gè)過程,在這個(gè)過程中,對(duì)象僅通過構(gòu)造函數(shù)參數(shù)、工廠方法的參數(shù)或在對(duì)象被實(shí)例化后通過屬性設(shè)置來定義它們的依賴項(xiàng)(即與該對(duì)象一起工作的其他對(duì)象)。然后,容器在創(chuàng)建 bean 時(shí)注入這些依賴項(xiàng)。這個(gè)過程基本上是與對(duì)象直接通過構(gòu)造類或等機(jī)制

    2024年02月07日
    瀏覽(26)
  • Spring 的依賴注入(DI)

    歡迎來到本篇文章,書接上回,本篇說說 Spring 中的依賴注入,包括注入的方式,寫法,該選擇哪個(gè)注入方式以及可能出現(xiàn)的循環(huán)依賴問題等內(nèi)容。 如果正在閱讀的朋友還不清楚什么是「依賴」,建議先看看我第一篇文章,通過 Employee 和 Department 簡(jiǎn)單說了什么是所謂的依賴。

    2024年02月11日
    瀏覽(18)
  • spring--Ioc控制反轉(zhuǎn)/DI依賴注入

    spring--Ioc控制反轉(zhuǎn)/DI依賴注入

    1.概念:在使用對(duì)象的時(shí)候,由主動(dòng)的new轉(zhuǎn)換為外部提供對(duì)象,將對(duì)象創(chuàng)建的控制權(quán)交給外部,即控制反轉(zhuǎn) 2.spring提供了一個(gè)容器,稱為IOC容器,用來從當(dāng)ioc中的外部 3.被管理或者被創(chuàng)建的對(duì)象在ioc中被叫做bean 使用步驟 1.導(dǎo)入依賴 spring-context 依賴,用到xml文件就需導(dǎo)入 2.創(chuàng)建

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

    IOC(Invertion Of Control):控制反轉(zhuǎn),使用對(duì)象時(shí),由使用new創(chuàng)建對(duì)象轉(zhuǎn)變?yōu)橛赏獠刻峁?duì)象,此過程中對(duì)象的創(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的依賴注入(DI)是什么,有哪些實(shí)現(xiàn)方式?

    在Spring中,依賴注入的實(shí)現(xiàn)方式主要有以下幾種: 類型式依賴注入(Type Based Dependency Injection):這種注入方式是通過Java接口或抽象類來實(shí)現(xiàn)的。具體來說,就是將需要注入的依賴關(guān)系定義為接口或抽象類,然后通過注解或XML配置文件等方式來指定具體的實(shí)現(xiàn)類。在運(yùn)行時(shí),

    2024年02月09日
    瀏覽(15)
  • Spring5學(xué)習(xí)隨筆-IOC(反轉(zhuǎn)控制)、DI(依賴注入)和創(chuàng)建復(fù)雜對(duì)象

    Spring5學(xué)習(xí)隨筆-IOC(反轉(zhuǎn)控制)、DI(依賴注入)和創(chuàng)建復(fù)雜對(duì)象

    學(xué)習(xí)視頻:【孫哥說Spring5:從設(shè)計(jì)模式到基本應(yīng)用到應(yīng)用級(jí)底層分析,一次深入淺出的Spring全探索。學(xué)不會(huì)Spring?只因你未遇見孫哥】 控制:對(duì)于成員變量賦值的控制權(quán) 反轉(zhuǎn)控制:把對(duì)于成員變量賦值的控制權(quán),從代碼中反轉(zhuǎn)(轉(zhuǎn)移)到Spring工廠和配置文件中。 好處:解耦合

    2024年02月05日
    瀏覽(55)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包