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

Spring第二講:SpringIoC控制反轉(zhuǎn)、依賴注入

這篇具有很好參考價(jià)值的文章主要介紹了Spring第二講:SpringIoC控制反轉(zhuǎn)、依賴注入。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

四、Spring IoC

4、1什么是IoC

在傳統(tǒng)的 Java 應(yīng)用中,一個(gè)類想要調(diào)用另一個(gè)類中的屬性或方法,通常會(huì)先在其代碼中通過(guò) new 的方式將后者的對(duì)象創(chuàng)建出來(lái),然后才能實(shí)現(xiàn)屬性或方法的調(diào)用。但在 Spring 應(yīng)用中,Java 對(duì)象創(chuàng)建的控制權(quán)是掌握在 IoC 容器手里,開發(fā)者通過(guò)XML或注解的配置將Java對(duì)象的管理權(quán)交給IoC容器,對(duì)象的創(chuàng)建由Spring完成。當(dāng)開發(fā)者需要用到對(duì)象時(shí),可以直接從Spring中獲取對(duì)象,不需要再自行創(chuàng)建。

IoC 帶來(lái)的最大改變不是代碼層面的,而是從思想層面上發(fā)生了“主從換位”的改變。原本開發(fā)者是主動(dòng)的一方,它想要使用什么資源就會(huì)自己創(chuàng)建。但在 Spring 應(yīng)用中,IoC 容器掌握著主動(dòng)權(quán),開發(fā)者則變成了被動(dòng)的一方,等待 IoC 容器創(chuàng)建對(duì)象后使用。

在應(yīng)用開發(fā)中,并不是所有對(duì)象都交給Spring創(chuàng)建,開發(fā)者經(jīng)常將功能類的對(duì)象交給Spring去創(chuàng)建,這些類的對(duì)象創(chuàng)建后只需要調(diào)用功能,實(shí)現(xiàn)功能即可,但實(shí)體對(duì)象,因?yàn)槊看蝿?chuàng)建存儲(chǔ)的數(shù)據(jù)或代表的內(nèi)容都不盡相同,所以實(shí)體類的對(duì)象還是使用常規(guī)方式(new)來(lái)實(shí)現(xiàn)對(duì)象創(chuàng)建。

4、2Spring加載Bean

DAO層

public interface IDemoDAO {
  public void show();
}

public class DemoDAO implements IDemoDAO {
  @Override
  public void show() {
    System.out.println("我是DAO方法");
  }
}

Service層

public interface IDemoService {
  public void show();
}

public class DemoService implements IDemoService {

  private IDemoDAO demoDAO=new DemoDAO();

  @Override
  public void show() {
    demoDAO.show();
  }
}

在applicationContext.xml中添加Bean配置

<!--bean標(biāo)簽聲明要?jiǎng)?chuàng)建的類,id為唯一標(biāo)識(shí),class為類的全路徑-->
<bean id="demoDAO" class="com.demo.DAO.Impl.DemoDAO"></bean>
<bean id="demoService" class="com.demo.service.Impl.DemoService"></bean>

獲取IoC創(chuàng)建的對(duì)象

//創(chuàng)建ApplicationContext,通過(guò)實(shí)例化ClassPathXmlApplicationContext獲取配置文件
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");
//getBeanDefinitionNames獲取配置文件中所有加載的Bean
String[] str=applicationContext.getBeanDefinitionNames();
for (String s : str) {
  System.out.println(s);
}
//getBean通過(guò)Bean的id屬性獲取對(duì)象
IDemoService demoService1= (IDemoService) applicationContext.getBean("demoService");
demoService1.show();

4、3Spring注入對(duì)象

通過(guò)案例可以看到Spring通過(guò)配置,為我們創(chuàng)建了對(duì)象,但是目前我們遇到了問(wèn)題,問(wèn)題就是,我們?cè)趯?shí)現(xiàn)過(guò)程中,Service要引用DAO的對(duì)象進(jìn)行功能實(shí)現(xiàn),我們的DAO雖然交給了Spring去創(chuàng)建,但我們依舊需要手動(dòng)創(chuàng)建,也就是說(shuō)我們要想實(shí)現(xiàn)功能,在Service中就要依賴于DAO的對(duì)象實(shí)現(xiàn)功能,這樣的形式,我們也可以交給Spring幫我們解決,這就是SpringIoC中重要的功能—依賴注入(DI)

在applicationContext.xml中進(jìn)行修改

<bean id="demoDAO" class="com.demo.DAO.Impl.DemoDAO"></bean>
<bean id="demoService" class="com.demo.service.Impl.DemoService">
  <!--property標(biāo)簽實(shí)現(xiàn)依賴注入,name屬性為調(diào)用類對(duì)象屬性的set方法,ref屬性為指向配置中的對(duì)象-->
  <property name="demoDAO" ref="demoDAO"/>
</bean>

Service類修改

public class DemoService implements IDemoService {
  
  private IDemoDAO demoDAO;

  public void setDemoDAO(IDemoDAO demoDAO) {
    this.demoDAO = demoDAO;
  }

  @Override
  public void show() {
    demoDAO.show();
  }
}

4、4使用注解實(shí)現(xiàn)IoC

通過(guò)配置文件實(shí)現(xiàn)SpringIoC,可以很好的分離代碼和配置,有較高的解耦性,但操作較為繁雜,所以Spring又提供了以注解形式對(duì)IoC進(jìn)行配置的方式,雖然解耦性降低,但代碼實(shí)現(xiàn)較為輕便。

IoC核心注解:

  • @Component 組件,通用的注解方式
  • @Service 在業(yè)務(wù)邏輯層使用(service層)
  • @Repository 在數(shù)據(jù)訪問(wèn)層使用(DAO層)
  • @Controller 在控制層使用,控制器的聲明(Controller)
  • @Autowired:用來(lái)實(shí)現(xiàn)依賴注入,Autowired會(huì)通過(guò)對(duì)象類型進(jìn)行注入,如在一個(gè)類中出現(xiàn)相同數(shù)據(jù)類型對(duì)象需要注入時(shí),需要配合@Qualifier(對(duì)象名)進(jìn)行組合注解進(jìn)行注入
  • @Resource:用來(lái)實(shí)現(xiàn)依賴注入,Resource會(huì)先根據(jù)名稱查找要注入的對(duì)象,在根據(jù)對(duì)象類型查找注入對(duì)象,根據(jù)名稱查找時(shí),可以通過(guò)Resource的name屬性查找

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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">
  <!--使用context:component-scan標(biāo)簽對(duì)包進(jìn)行掃描,base-package屬性為要掃描的包,掃描時(shí)會(huì)講包下面的所有注解進(jìn)行掃描-->
  <context:component-scan base-package="com.demo"/>
</beans>

DAO層

@Repository
public class DemoDAO implements IDemoDAO {
  @Override
  public void show() {
    System.out.println("我是DAO方法");
  }
}

Service層

@Service
public class DemoService implements IDemoService {

  //@Autowired
  //@Qualifier("demoDAO")
  @Resource
  private IDemoDAO demoDAO;

  /*
  public void setDemoDAO(IDemoDAO demoDAO) {
    this.demoDAO = demoDAO;
  }
  */

  @Override
  public void show() {
    demoDAO.show();
  }
}

獲取IoC對(duì)象

//創(chuàng)建ApplicationContext,通過(guò)實(shí)例化ClassPathXmlApplicationContext獲取配置文件
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");
//getBeanDefinitionNames獲取配置文件中所有加載的Bean
String[] str=applicationContext.getBeanDefinitionNames();
for (String s : str) {
  System.out.println(s);
}
//getBean通過(guò)Bean的id屬性獲取對(duì)象
IDemoService demoService1= (IDemoService) applicationContext.getBean("demoService");
demoService1.show();

4、5Resource注解和Autowired注解的區(qū)別

@Autowired 和 @Resource 都是用來(lái)實(shí)現(xiàn)依賴注入的注解(在 Spring/Spring Boot 項(xiàng)目中),但二者卻有著不同:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-537773.html

  • 來(lái)源不同:@Autowired 來(lái)自 Spring 框架,而 @Resource 來(lái)自于Java
  • 依賴查找的順序不同:@Autowired 先根據(jù)類型再根據(jù)名稱查詢,而 @Resource 先根據(jù)名稱再根據(jù)類型查詢
  • 支持的參數(shù)不同:@Autowired 只支持設(shè)置 1 個(gè)參數(shù),而 @Resource 支持設(shè)置 7 個(gè)參數(shù)
  • 依賴注入的用法支持不同:@Autowired 既支持構(gòu)造方法注入,又支持屬性注入和 Setter 注入,而 @Resource 只支持屬性注入和 Setter 注入

到了這里,關(guān)于Spring第二講:SpringIoC控制反轉(zhuǎn)、依賴注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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 IoC 和 DI:掌握控制反轉(zhuǎn)和依賴注入的精髓

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

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

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

    學(xué)習(xí)視頻:【孫哥說(shuō)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日
    瀏覽(54)
  • 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)
  • Java Spring IoC&DI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性

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

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

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

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

    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)類和成員。 通過(guò)將應(yīng)用設(shè)計(jì)為改用單一實(shí)例服務(wù),避免創(chuàng)建全局狀態(tài)。 避免在服務(wù)中直接實(shí)例化依賴類。 直接實(shí)例化會(huì)將代碼耦合到特定實(shí)現(xiàn)。 不在服務(wù)

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

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

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

    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)系 。今天就以一個(gè)簡(jiǎn)單的小例子,簡(jiǎ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ū)ο缶幊讨械囊粋€(gè)設(shè)計(jì)原則,用來(lái)降低程序代碼之間的耦合度。在傳統(tǒng)面向?qū)ο缶幊讨?,獲取對(duì)象的方式是用new主動(dòng)創(chuàng)建一個(gè)對(duì)象,也就是說(shuō)應(yīng)用程序掌握著對(duì)

    2024年02月16日
    瀏覽(38)
  • CommunityToolkit.Mvvm8.1 IOC依賴注入控制反轉(zhuǎn)(5)

    ? 本系列文章導(dǎo)航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知識(shí)對(duì)您有所提示,同時(shí)歡迎交流和指正 作者:aierong 出處:https://www.cnblogs.com/aierong ? ? CommunityToolkit.Mvvm包不提供ioc功能,但是官方建議使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包