欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring中bean實(shí)例化的三種方式

 更新時(shí)間:2017年04月14日 15:32:06   作者:_江南一點(diǎn)雨  
本篇文章主要介紹了詳解Spring中bean實(shí)例化的三種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

今天我想來說說如何通過xml配置來實(shí)例化bean,其實(shí)也很簡單。

使用xml配置來實(shí)例化bean共分為三種方式,分別是普通構(gòu)造方法創(chuàng)建、靜態(tài)工廠創(chuàng)建、實(shí)例工廠創(chuàng)建,OK,那么接下來我們來分別看看這幾種方式。

普通構(gòu)造方法創(chuàng)建

這種創(chuàng)建方式使我們使用最多的一種創(chuàng)建方式,直接配置bean節(jié)點(diǎn)即可,比如我有一個(gè)User類,如下:

public class User {
  public void add() {
    System.out.println("add()---------");
  }
}

然后通過簡單配置一個(gè)bean節(jié)點(diǎn)就可以獲取實(shí)例了,如下:

<bean class="org.sang.User" id="user"/>

OK,我們通過如下代碼進(jìn)行一個(gè)簡單的測試:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User user = (User) context.getBean("user");
    System.out.println(user);

運(yùn)行輸出結(jié)果如下:

這里寫圖片描述

靜態(tài)工廠創(chuàng)建

除了通過普通的構(gòu)造方法創(chuàng)建之外,我們也可以通過靜態(tài)構(gòu)造方法來創(chuàng)建一個(gè)bean的實(shí)例,假設(shè)我有一個(gè)類叫做User2,如下:

public class User2 {
  public void add() {
    System.out.println("add2()---------");
  }
}

我給它創(chuàng)建一個(gè)靜態(tài)工廠,如下:

public class User2Factory {
  public static User2 getInstance() {
    return new User2();
  }
}

該工廠中有一個(gè)靜態(tài)方法,該靜態(tài)方法返回一個(gè)User2的實(shí)例,在Spring的配置文件中,我們看看如何生成User2的實(shí)例:

復(fù)制代碼 代碼如下:

<bean id="user2" class="org.sang.User2Factory" factory-method="getInstance"/>

還是bean節(jié)點(diǎn),只是多了一個(gè)factory-method屬性,該屬性指明該類中的靜態(tài)工廠方法名為getInstance,這樣Spring框架就知道調(diào)用哪個(gè)方法來獲取User2的實(shí)例了,測試代碼如下:

@Test
  public void test2() {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User2 user = (User2) context.getBean("user2");
    user.add();
  }

測試結(jié)果如下:

這里寫圖片描述

值得強(qiáng)調(diào)的是,這種方法并不常用。

實(shí)例工廠創(chuàng)建

小伙伴們看了靜態(tài)工廠創(chuàng)建bean實(shí)例肯定都覺得很麻煩,事實(shí)上還有比靜態(tài)工廠更麻煩的寫法,那就是通過實(shí)例工廠來創(chuàng)建bean實(shí)例。實(shí)例工廠,顧名思義,就是我們工廠中的方法不是靜態(tài)的,比如說,我有一個(gè)實(shí)體類叫做User3,如下:

public class User3 {
  public void add() {
    System.out.println("add3()---------");
  }
}

然后我還有一個(gè)工廠方法,如下:

public class User3Factory {
  public User3 getUser3() {
    return new User3();
  }
}

小伙伴們看到,在User3Factory類中有一個(gè)getUser3的方法,該方法返回一個(gè)User3類的實(shí)例,但是該方法不是靜態(tài)的,那么我們在Spring的配置文件中要進(jìn)行怎樣的配置才能獲取User3的一個(gè)實(shí)例呢?如下:

<bean class="org.sang.User3Factory" id="user3Factory"/>
<bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>

第一個(gè)bean用來獲取user3Factory的實(shí)例,第二個(gè)bean則根據(jù)User3Factory的實(shí)例,然后指定factory-method,通過getUser3方法來獲取User3的實(shí)例。

測試代碼如下:

  @Test
  public void test3() {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User3 user = (User3) context.getBean("user3");
    user.add();
  }

測試結(jié)果如下:

這里寫圖片描述

OK,以上就是bean實(shí)例化的三種方式,最最常用的是第一種。

本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test28-Spring1

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Boot中@Import三種使用方式實(shí)例詳解

    Spring?Boot中@Import三種使用方式實(shí)例詳解

    這篇文章主要介紹了Spring?Boot中@Import三種使用方式,主要有引入普通類,引入importSelector的實(shí)現(xiàn)類及引入importBeanDefinitionRegister的實(shí)現(xiàn)類,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 詳解Thymeleaf的三種循環(huán)遍歷方式

    詳解Thymeleaf的三種循環(huán)遍歷方式

    Thymeleaf?是一款用于渲染?XML/XHTML/HTML5?內(nèi)容的模板引擎。本文為大家總結(jié)了Thymeleaf的三種循環(huán)遍歷方式,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • JVM回收跨代垃圾的方式詳解

    JVM回收跨代垃圾的方式詳解

    在Java堆內(nèi)存中,年輕代和老年代之間存在的對象相互引用,假設(shè)現(xiàn)在要進(jìn)行一次新生代的YGC,但新生代中的對象可能被老年代所引用的,為了找到新生代中的存活對象,不得不遍歷整個(gè)老年代,這樣明顯效率很低下,那么如何快速識別并回收這種引用對象呢
    2024-02-02
  • SpringBoot跨域Access-Control-Allow-Origin實(shí)現(xiàn)解析

    SpringBoot跨域Access-Control-Allow-Origin實(shí)現(xiàn)解析

    這篇文章主要介紹了SpringBoot跨域Access-Control-Allow-Origin實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 淺談UUID生成的原理及優(yōu)缺點(diǎn)

    淺談UUID生成的原理及優(yōu)缺點(diǎn)

    UUID是一套用于生成全局唯一標(biāo)識符的標(biāo)準(zhǔn),也被稱為GUID?(Globally?Unique?Identifier),通過使用UUID可以在分布式系統(tǒng)中生成唯一的?ID,UUID的生成方式有多種,本文將詳細(xì)講解?UUID?的生成原理、特性、實(shí)用場景以及優(yōu)缺點(diǎn)
    2023-06-06
  • 詳細(xì)分析Java Lambda表達(dá)式

    詳細(xì)分析Java Lambda表達(dá)式

    這篇文章主要介紹了Java Lambda表達(dá)式的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Spring中的@Transactional注解使用詳解

    Spring中的@Transactional注解使用詳解

    這篇文章主要介紹了Spring中的@Transactional注解使用詳解,@Transactional 是一個(gè)注解,用于在 Spring 框架中管理事務(wù)的聲明式事務(wù)管理機(jī)制,它可以應(yīng)用于方法或類級別,并指示方法或類在執(zhí)行時(shí)應(yīng)該被包裝在一個(gè)事務(wù)中,需要的朋友可以參考下
    2024-01-01
  • org.apache.zookeeper.KeeperException.BadVersionException異常的解決

    org.apache.zookeeper.KeeperException.BadVersionException異常的解

    在使用Apache ZooKeeper進(jìn)行分布式協(xié)調(diào)時(shí),你可能會(huì)遇到org.apache.zookeeper.KeeperException.BadVersionException異常,本文就來介紹一下解決方法,感興趣的可以了解一下
    2024-03-03
  • Mybatis查詢Sql結(jié)果未映射到對應(yīng)得實(shí)體類上的問題解決

    Mybatis查詢Sql結(jié)果未映射到對應(yīng)得實(shí)體類上的問題解決

    使用mybatis查詢表數(shù)據(jù)得時(shí)候,發(fā)現(xiàn)對應(yīng)得實(shí)體類字段好多都是null,本文主要介紹了Mybatis查詢Sql結(jié)果未映射到對應(yīng)得實(shí)體類上的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 淺談Java多進(jìn)程程序的運(yùn)行模式

    淺談Java多進(jìn)程程序的運(yùn)行模式

    這篇文章主要介紹了淺談Java多進(jìn)程程序的運(yùn)行模式,包括對進(jìn)程阻塞問題的討論等,需要的朋友可以參考下
    2015-11-11

最新評論