最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中IoC優(yōu)點(diǎn)與缺點(diǎn)解析

 更新時(shí)間:2017年11月02日 10:09:41   作者:myLittleGarden  
這篇文章主要為大家詳細(xì)解析了Spring中IoC優(yōu)點(diǎn)與缺點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Spring中IoC優(yōu)點(diǎn)與缺點(diǎn),供大家參考,具體內(nèi)容如下

1. 優(yōu)點(diǎn)

        我們知道,在Java基本教程中有一個(gè)定律告訴我們:所有的對(duì)象都必須創(chuàng)建;或者說:使用對(duì)象之前必須創(chuàng)建,但是現(xiàn)在我們可以不必一定遵循這個(gè)定律了,我們可以從Ioc容器中直接獲得一個(gè)對(duì)象然后直接使用,無需事先創(chuàng)建它們。

  這種變革,就如同我們無需考慮對(duì)象銷毀一樣;因?yàn)镴ava的垃圾回收機(jī)制幫助我們實(shí)現(xiàn)了對(duì)象銷毀;現(xiàn)在又無需考慮對(duì)象創(chuàng)建,對(duì)象的創(chuàng)建和銷毀都無需考慮了,這給編程帶來的影響是巨大的。

  我們從一個(gè)簡(jiǎn)單例子開始,有一個(gè)普通類B代碼如下:

public class B implements BI{
    AInfterface a;

    public B(AInfterface a){
      this.a = a
    }

    public void invoke(){
      /** ...*/
    }
}

有兩種使用B的方式:

  普通無Ioc容器的調(diào)用方式:
  BI b = new B(new A());//需要在生成B實(shí)例之前 生成A等實(shí)例
  b. invoke();

  使用Ioc容器的革命調(diào)用方式:
  BI b = (BI) WebAppUtil.getService(“b”);
  b. invoke();

  上面兩種方式重要區(qū)別:

  前者需要照顧B類中A類的實(shí)例化,如果B類中調(diào)用不只A類一個(gè),還有更多其他類如C/D/E等類,這樣,你在使用B類時(shí),還需要研究其他類的創(chuàng)建,如果C/D/E這些類不是你自己編寫,你還需要翻閱它們的API說明,研究它們應(yīng)該如何創(chuàng)建?是使用New 還是工廠模式 還是單態(tài)調(diào)用?

  這時(shí),你會(huì)感嘆:哇,有沒有搞錯(cuò)?我只不過是為了使用B類中一個(gè)小小的方法,就花去我這么多時(shí)間和精力?

  當(dāng)我們使用第二種方式時(shí),就無需花很多精力和時(shí)間考慮A/C/D/E等類的創(chuàng)建。

  使用Ioc容器,你再也不必做這些僵化愚蠢的工作了,我們只需從ioc容器中抓取一個(gè)類然后直接使用它們。

  當(dāng)然,在使用之前,我們需要做一個(gè)簡(jiǎn)單的配置,把你將來需要使用的類全部告訴ioc容器,例如Jdon框架的ioc容器配置jdonframework.xml如下:

<app>
  <services>
    <pojoService name="b" class="test.B"/>
    <pojoService name="a" class="test.A"/>
    <pojoService name="c" class="test.C"/>
 
  </services>
</app>

  注意:雖然B類代碼調(diào)用了A類(甚至可能調(diào)用C等其他類),但是在配置中我們無需考慮這種調(diào)用關(guān)系。因此,整個(gè)環(huán)節(jié)我們都無需考慮B類中涉及其他類的調(diào)用關(guān)系;這樣是非常省時(shí)省力的;特別是如果項(xiàng)目較大,JavaBeans特別多,又是多人協(xié)調(diào)開發(fā),這種方式對(duì)提高開發(fā)效率;降低出錯(cuò)率是非常大的幫助。

  如果你的項(xiàng)目中有非常多的類;調(diào)用關(guān)系很復(fù)雜,而且調(diào)用關(guān)系隨時(shí)都可能變化,那么,使用無需照顧調(diào)用關(guān)系的Ioc容器無疑是減輕開發(fā)負(fù)擔(dān)的首選。

  ioc容器另外一個(gè)著名實(shí)現(xiàn)是Spring框架,但是在Spring的配置文件applicationContext.xml中,我們必須考慮上述調(diào)用關(guān)系:

<bean id="b" class="test.B">
  <property name="a"><ref bean="a"/></property><!-- 必須指定調(diào)用關(guān)系 -->
  ....
</bean>
<bean id="a" class="test.A">
<bean id="c" class="test.C">

2. 缺點(diǎn)

IoC最大的缺點(diǎn)是什么?

生成一個(gè)對(duì)象的步驟變復(fù)雜了(其實(shí)上操作上還是挺簡(jiǎn)單的),對(duì)于不習(xí)慣這種方式的人,會(huì)覺得有些別扭和不直觀。
對(duì)象 生成因?yàn)槭鞘褂梅瓷渚幊蹋谛噬嫌行p耗。但相對(duì)于IoC提高的維護(hù)性和靈活性來說,這點(diǎn)損耗是微不足道的,除非某對(duì)象的生成對(duì)效率要求特別高。

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

相關(guān)文章

  • 詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用

    詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用

    這篇文章主要介紹了詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用,延遲隊(duì)列中的元素都是帶有時(shí)間屬性的,延遲隊(duì)列就是用來存放需要在指定時(shí)間被處理的元素的隊(duì)列,需要的朋友可以參考下
    2023-05-05
  • SpringBoot+JUnit5+MockMvc+Mockito單元測(cè)試的實(shí)現(xiàn)

    SpringBoot+JUnit5+MockMvc+Mockito單元測(cè)試的實(shí)現(xiàn)

    今天聊聊如何在 SpringBoot 中集成 Junit5、MockMvc、Mocktio。Junit5 是在 Java 棧中應(yīng)用最廣的測(cè)試框架,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • springmvc后臺(tái)基于@ModelAttribute獲取表單提交的數(shù)據(jù)

    springmvc后臺(tái)基于@ModelAttribute獲取表單提交的數(shù)據(jù)

    這篇文章主要介紹了springmvc后臺(tái)基于@ModelAttribute獲取表單提交的數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring注解@Configuration和@Component區(qū)別詳解

    Spring注解@Configuration和@Component區(qū)別詳解

    @Component和@Configuration都可以作為配置類,之前一直都沒覺得這兩個(gè)用起來有什么差別,可能有時(shí)程序跑的和自己想的有所區(qū)別也沒注意到,下面這篇文章主要給大家介紹了關(guān)于Spring注解@Configuration和@Component區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Java中finalize()詳解及用法

    Java中finalize()詳解及用法

    這篇文章主要介紹了Java中finalize()詳解及用法的相關(guān)資料,final是Java的關(guān)鍵字,它所表示的是“這部分是無法修改的”,需要的朋友可以參考下
    2017-03-03
  • SpringBoot對(duì)接twilio實(shí)現(xiàn)郵件信息發(fā)送功能

    SpringBoot對(duì)接twilio實(shí)現(xiàn)郵件信息發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何對(duì)接twilio實(shí)現(xiàn)郵件信息發(fā)送功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Java如果通過jdbc操作連接oracle數(shù)據(jù)庫(kù)

    Java如果通過jdbc操作連接oracle數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Java如果通過jdbc操作連接oracle數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java如何將若干時(shí)間區(qū)間進(jìn)行合并的方法步驟

    Java如何將若干時(shí)間區(qū)間進(jìn)行合并的方法步驟

    這篇文章主要介紹了Java如何將若干時(shí)間區(qū)間進(jìn)行合并的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 詳解SpringMVC組件之HandlerMapping(二)

    詳解SpringMVC組件之HandlerMapping(二)

    這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(二),HandlerMapping組件是Spring?MVC核心組件,用來根據(jù)請(qǐng)求的request查找對(duì)應(yīng)的Handler,在Spring?MVC中,有各式各樣的Web請(qǐng)求,每個(gè)請(qǐng)求都需要一個(gè)對(duì)應(yīng)的Handler來處理,需要的朋友可以參考下
    2023-08-08
  • SpringCloud重試機(jī)制配置詳解

    SpringCloud重試機(jī)制配置詳解

    本篇文章主要介紹了SpringCloud重試機(jī)制配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論

四川省| 大港区| 应城市| 岗巴县| 项城市| 张家口市| 乐都县| 巴林右旗| 乌拉特中旗| 韶山市| 思茅市| 泗阳县| 固阳县| 通城县| 海淀区| 建始县| 新化县| 周宁县| 澳门| 德兴市| 西乌珠穆沁旗| 大田县| 临武县| 山东| 永清县| 兴化市| 江都市| 漳平市| 福建省| 普兰店市| 宁德市| 娱乐| 河间市| 长子县| 射洪县| 东至县| 东兴市| 南郑县| 建阳市| 平果县| 长兴县|