java----spring架構

來源:互聯網
上載者:User

標籤:

註:本文來自於網路或者老師的總結資料,本人僅為摘錄,想瞭解更多相關資料,可以關註:

http://blog.csdn.net/pu_xubo565599455

 

什麼是spring架構?

  Spring 是一個開源架構,是一種整合性的架構,是為瞭解決公司專屬應用程式程式開發複雜性而建立的。架構的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程式開發提供整合的架構。至03年spring架構發布以來到現在pring架構已經發展成JavaEE開發中的非常重要的一個架構。雖然還是有公司採用自己的方式來處理代碼間的耦合問題,但是他們採用的方式依舊是Spring架構的基礎,即:原廠模式與服務定位器模式等。

  Spring是為公司專屬應用程式開發提供的一個輕量級解決方案,包括:基於依賴注入的核心機制,基於AOP的聲明式事務(聯想下編程式事務),整合多種持久層技術的整合,整合很多優秀的WEB MVC架構等。Spring是致力於JavaEE應用各層的解決方案,而不是單單針對某一層。Spring貫穿表現層,業務層,持久層,但是Spring並不想取代那些已有的架構,而是以高度的開發性與它們無縫整合。

spring架構優點?

1、 低侵入式設計,代碼的汙染極低。

2、 Spring容器降低了業務對象替換的複雜性,提高了組件之間的解耦。

3、 Spring的AOP支援允許將一些通用任務如:安全,事務,日誌等進行集中式處理,從而提供了更好的複用。

4、 Spring的ORM和DAO提供了與第三方持久化架構的良好整合,並簡化了底層的資料庫訪問。

5、 Spring的高度開發性,並不強制應用完全依賴於Spring,開發人員可自由選擇Spring架構的部分或全部。

 

spring--IOC

  IOC 即 Inversion Of Control,控制反轉或者稱之為依賴注入。IoC 不是一種技術,只是一種思想,一個重要的物件導向編程的法則,它能指導我們如何設計出松耦合、更優良的程式。在工作中, JAVA執行個體的調用者通過new關鍵字來建立被調用者的JAVA執行個體,程式高度耦合,效率低下,真實的應用極少使用這種方式,一般是初學者最喜歡。有了IoC容器後,把建立和尋找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是 鬆散耦合,這樣也方便測試,利於功能複用,更重要的是使得程式的整個體繫結構變得非常靈活。依賴注入是目前最優秀的解耦方式,依賴注入讓Spring的Bean以設定檔群組織在一起,而不是以硬式編碼方式耦合在一起。

依賴注入通常有如下兩種方式:

設值注入:IOC容器使用屬性的Setter方法來注入被依賴的執行個體。

構造注入:IOC容器使用構造器來注入被依賴的執行個體。

設值注入:

設值注入是指IOC容器使用屬性的Setter方法來注入被依賴的執行個體。這種注入方式簡單、直觀,因而在Spring的依賴注入裡大量使用。

例外:

注意:Spring推薦面向介面編程,可以更好的讓規範和實現分離,從而提供更好的解耦,對於一個JAVAEE應用,不管是DAO組件,還是商務邏輯組件,都應該先定義一個介面,該介面定義組件應該實現的功能,但是功能的實現則由其實作類別提供。

我們先定義2個介面,如:

然後,分別實現其實作類別,如:

 

 

 

 

最後,我們在applicationContext.xml的<beans></beans>中分別配置2個JAVABEAN執行個體,並配置其關係管理。如:

 

在設定檔中,Spring配置Bean執行個體通常會指定2個屬性:

Id:指定該Bean的唯一標識,程式通過ID屬性值來訪問該BEAN執行個體。

Class:指定該BEAN的實作類別,此處不可再用介面,必須使用實作類別,Spring容器會使用XML解析器讀取該屬性值,並利用反射來建立該實作類別的執行個體。

 

從上面的樣本中,可以分析出,依賴注入以設定檔管理BEAN執行個體之間的耦合,讓BEAN執行個體之間的耦合從代碼層次分離出來,依賴注入是一種優秀的解耦方式。

分析得到SpringIOC容器的3個基本要點:

1、 應用程式的各組件面向介面編程。面向介面編程可以將各組件之間的耦合提示到介面層次,從而有利於項目後期的發展。

2、 應用程式的各組件不再由程式主動產生,而是由Spring容器來負責產生、並初始化。

3、 Spring採用設定檔、或Annotation來管理Bean的實作類別、依賴關係,Spring容器則根據設定檔、利用反射來建立執行個體,並為之注入依賴關係。

構造注入:

前面我們介紹,通過setter方法為目標Bean注入依賴關係的方式,被稱為設值注入:另外還有一種注入方式,這種方式在構造執行個體時,已經為其完成了依賴關係的初始化。這種利用構造器來設定依賴關係的方式,被稱之為構造注入。

import com.lovo.beans.CardInfoT;

import com.lovo.dao.ICardDao;

import com.lovo.service.ICardService;

 

public class CardServiceImpl implements ICardService {

 

private ICardDao cardDaoImpl;

 

//預設的構造器,如果要設定有參構造,需要先顯示執行無參構造

public CardServiceImpl(){

}

/**

 * 構造注入所需的帶參數的構造器

 * @param cardDao

 */

public CardServiceImpl(ICardDao cardDao){

this.cardDaoImpl = cardDao;

}

public void saveCard(CardInfoT card) {

// TODO Auto-generated method stub

cardDaoImpl.saveCard(card);

}

}

applicationContext.xml中添加配置為:

<!-- 由spring容器建立執行個體化對象,並管理對象之間的關係 -->

<bean id="cardDaoImpl" class="com.lovo.dao.impl.CardDaoImpl"></bean>

<!-- spring構造注入-->

<bean id="cardServiceImpl" class="com.lovo.service.impl.CardServiceImpl">

<!-- 使用構造注入,為 cardServiceImpl執行個體注入cardDaoImpl執行個體-->

<constructor-arg ref="cardDaoImpl"></constructor-arg>

</bean>

兩種注入方式的對比:

Spring同時支援兩種依賴注入方式:設定注入和構造注入。兩種注入方式,並沒有絕對的好壞之分,只是適應的情境有所不同。

相比之下,設定注入具有如下優點:

1、 與傳統的JavaBean的寫法更相識,程式開發人員更容易理解、接受、通過setter方式設定依賴關係顯得更加直觀、自然。

2、 對於複雜的依賴關係,如果採用構造注入,會導致構造器過於臃腫,難以閱讀。Spring在建立Bean執行個體時,需要同時執行個體化其依賴的全部執行個體,因而導致效能下降。而使用設定注入,則可以避免。

3、 尤其是在某些屬性可選的情況下,多參數的構造器更加笨重。

 

當然,構造注入也不是絕對不如設值注入,某些特定的場合,構造更適合。構造也有如下優點:

1、 構造注入可以在構造器中決定依賴關係的注入順序,優先依賴的優先注入,常常需要依賴於Datasource的注入。採用構造注入,可以在代碼中清晰地決定注入順序。

2、 對於依賴關係無須變化的Bean,構造注入更有用處。因為沒有setter方法,所有的依賴關係全部在構造器中設定,因此,無須擔心後續的代碼對依賴關係產生破壞。

3、 依賴關係只能在構造器中設定,則只有組件的建立者才能改變組件的依賴關係。對組件的調用者而言,組件內部的依賴關係完全透明,更符合高內聚的原則。

建議採用以設值注入為主,構造注入為輔的注入策略。對於依賴關係無須變化的注入,盡量採用構造注入;而其他的依賴關係的注入,則考慮採用設值注入。

Spring 容器

  Spring提供了兩個核心介面:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子介面。他們都可代表Spring容器,Spring容器是產生Bean執行個體的工廠,並管理容器中的Bean。Bean是Spring管理的基本單位,在基於Spring的JavaEE應用中,所有的組件都被當成Bean處理,包括資料來源、Hibernate的SessionFactory、交易管理員等。

BeanFactory:

Spring容器最基本的介面就是BeanFactory,該介面負責配置、建立,管理Bean,它有一個子介面;AppcationContext,也被稱為Spring上下文。Spring容器還負責管理Bean與Bean之間的依賴關係。

調用者只需使用getBean()方法即可獲得指定Bean的引用,無須關心Bean的執行個體化過程。

BeanFactory有一個常見的實作類別:org.springframework.beans.factory.xml.XmlBeanFactory類。

ApplicationContext是BeanFactory的子介面,對於大部分JavaEE應用而言,使用它作為Spring容器更方便。其常見實作類別是:FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotataionConfigApplicationContext。如果在web應用中使用Spring容器,通常有XmlWebApplicationContext、AnnotatioinConfigWebApplicationContext兩個實作類別。

大部分的JavaEE應用,可以在啟動WEB應用時自動載入ApplicationContext執行個體,接受Spring管理的Bean無須知道ApplicationContext的存在,一樣可以利用ApplicationContext的管理。對於獨立的應用程式,也可通過如下方法來執行個體化BeanFactory。

1、

//搜尋當前檔案路徑下的beans.xml檔案建立Resource對象

InputStreamResource isr = new FileSystemResource(“beans.xml”);

//以Resource對象作為參數,建立BeanFactory對象

XmlBeanFactory factory = new XmlBeanFactory(isr);

 

或者採用:

2、

//搜尋類載入路徑,以類載入路徑下的beans.xml檔案建立Resource對象

ClassPathResource res = new ClassPathResource(“beans.xml”);

//以Resource對象作為參數,建立BeanFactory對象

XmlBeanFactory factory = new XmlBeanFactory(res);

 

如果需要同時載入多個XML設定檔,則可以採用如下方式:

//搜尋CLASSPATH路徑,以CLASSPATH路徑下的applicationContext.xml、Bean.xml、Service.xml檔案建立ApplicationContext

ApplicationContext appContext = new ClassPathXmlApplicaation(new String[“beans.xml”,”service.xml”]);

ApplicationContext:

大部分時候,我們都不會使用BeanFactory執行個體作為Spring 容器,而是使用ApplicationContext執行個體作為容器,因此我們也把Spring容器稱為Spring上下文。ApplicationContext是BeanFactory介面的子介面,它增強了BeanFactory的功能。

ApplicationContext允許以聲明式方式操作容器,無須手動建立它。可利用如ContextLoader的支援類,在WEB應用啟動時自動建立ApplicationContext。當前,也可以採用編程方式建立ApplicationContext.

BeanFactory與ApplicationContext執行個體化容器中Bean的時機不同,前者等到程式需要Bean執行個體時才建立,而後者在容器建立ApplicationContext執行個體時,會預初始化容器中的全部Bean。

因為採用ApplicationContext作為Spring容器,建立容器時會同時建立容器中所有singleton範圍Bean,因此可能需要更多的系統開銷。但一旦建立成功,應用後面的響應速度就會更快,因此,對於普通的JavaEE應用,推薦使用ApplicationContext作為Spring容器。

實際上Spring允許singleton作用的Bean指定lazy-init=”true”,該屬性將改變singleton Bean執行個體的預設行為,強製取消該Bean執行個體預初始化,則該Bean將不會隨著ApplicationContext啟動而預執行個體化。

 

 

 

java----spring架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.