Spring[由Rod Johnson創建的一個開源框架]

Spring[由Rod Johnson創建的一個開源框架]

Spring是一個開放原始碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統套用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。

基本信息

起源

你可能正在想“Spring不過是另外一個的framework”(英語釋義:框架,骨架;結構,構架)。當已經有許多開放原始碼(和專有)J2EEframework時,我們為什麼還需要Spring Framework?

Spring是獨特的,因為若干個原因:

它定位的領域是許多其他流行的framework沒有的。Spring致力於提供一種方法管理你的業務對象。

Spring是全面的和模組化的。Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務對象。

它的設計從底部幫助你編寫易於測試的代碼。Spring是用於測試驅動工程的理想的framework。

Spring對你的工程來說,它不需要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型套用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。

背景

Spring[由Rod Johnson創建的一個開源框架] Spring[由Rod Johnson創建的一個開源框架]

Rod Johnson在2002年編著的《Expert one on one J2EE design and development》一書中,對Java EE 系統框架臃腫、低效、脫離現實的種種現狀提出了質疑,並積極尋求探索革新之道。以此書為指導思想,他編寫了interface21框架,這是一個力圖衝破J2EE傳統開發的困境,從實際需求出發,著眼於輕便、靈巧,易於開發、測試和部署的輕量級開發框架。Spring框架即以interface21框架為基礎,經過重新設計,並不斷豐富其內涵,於2004年3月24日,發布了1.0正式版。同年他又推出了一部堪稱經典的力作《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變著Java開發者程式設計和開發的思考方式。在該書中,作者根據自己多年豐富的實踐經驗,對EJB的各種笨重臃腫的結構進行了逐一的分析和否定,並分別以簡潔實用的方式替換之。至此一戰功成,Rod Johnson成為一個改變Java世界的大師級人物。

傳統J2EE套用的開發效率低,套用伺服器廠商對各種技術的支持並沒有真正統一,導致J2EE的套用沒有真正實現Write Once及Run Anywhere的承諾。Spring作為開源的中間件,獨立於各種套用伺服器,甚至無須套用伺服器的支持,也能提供套用伺服器的功能,如聲明式事務、事務處理等。

Spring致力於J2EE套用的各層的解決方案,而不是僅僅專注於某一層的方案。可以說Spring是企業套用開發的“一站式”選擇,並貫穿表現層、業務層及持久層。然而,Spring並不想取代那些已有的框架,而是與它們無縫地整合。

框架特徵

輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR檔案里發布。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring套用中的對象不依賴於Spring的特定類。

控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當套用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離套用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。套用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。

容器——Spring包含並管理套用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基於一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。

框架——Spring可以將簡單的組件配置、組合成為複雜的套用。在Spring中,套用對象被聲明式地組合,典型地是在一個XML檔案里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將套用邏輯的開發留給了你。

MVC——Spring的作用是整合,但不僅僅限於整合,Spring 框架可以被看做是一個企業解決方案級別的框架。客戶端傳送請求,伺服器控制器(由DispatcherServlet實現的)完成請求的轉發,控制器調用一個用於映射的類HandlerMapping,該類用於將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器Controller(相當於Action)在Spring 當中如果寫一些處理器組件,一般實現Controller 接口,在Controller 中就可以調用一些Service 或DAO 來進行數據操作 ModelAndView 用於存放從DAO 中取出的數據,還可以存放回響視圖的一些數據。 如果想將處理結果返回給用戶,那么在Spring 框架中還提供一個視圖組件ViewResolver,該組件根據Controller 返回的標示,找到對應的視圖,將回響response 返回給用戶。

所有Spring的這些特徵使你能夠編寫更乾淨、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模組提供了基礎支持。

特性

強大的基於 JavaBeans的採用控制反轉(Inversion of Control,IoC)原則的配置管理,使得應用程式的組件更加快捷簡易。

一個可用於從 applet 到 Java EE 等不同運行環境的核心 Bean 工廠。

資料庫事務的一般化抽象層,允許宣告式(Declarative)事務管理器,簡化事務的劃分使之與底層無關。

內建的針對 JTA 和 單個 JDBC 數據源的一般化策略,使 Spring 的事務支持不要求 Java EE 環境,這與一般的 JTA 或者 EJB CMT 相反。

JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼), 簡化了錯誤處理, 大大減少了程式設計師的編碼量. 再次利用JDBC時,你無需再寫出另一個 '終止' (finally) 模組. 並且面向JDBC的異常與Spring 通用數據訪問對象(Data Access Object) 異常等級相一致.

以資源容器,DAO 實現和事務策略等形式與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用眾多的反轉控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務處理和通用數據訪問對象異常等級規範.

靈活的基於核心 Spring 功能的 MVC 網頁應用程式框架。開發者通過策略接口將擁有對該框架的高度控制,因而該框架將適應於多種呈現(View)技術,例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中間層可以輕易地結合於任何基於 MVC 框架的網頁層,例如 Struts,WebWork,或 Tapestry。

提供諸如事務管理等服務的面向切面編程(AOP)框架。

特點

1.方便解耦,簡化開發

通過Spring提供的IoC容器,我們可以將對象之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。有了Spring,用戶不必再為單實例模式類、屬性檔案解析等這些很底層的需求編寫代碼,可以更專注於上層的套用。

2.AOP 編程 的支持

通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。

3. 聲明式事務 的支持

在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。

4.方便程式的測試

可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring里,測試不再是昂貴的操作,而是隨手可做的事情。例如:Spring對Junit4支持,可以通過註解方便的測試Spring程式。

5.方便集成各種優秀框架

Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

6.降低Java EE API的使用難度

Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。

7.Java 源碼是經典學習範例

Spring的源碼設計精妙、結構清晰、匠心獨運,處處體現著大師對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和套用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。

好處

在我們進入細節以前,讓我們看一下Spring可以給一個工程帶來的一些好處:

Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有API的framework,你會發現Spring關注了遺留下的問題。Spring能消除在許多工程上對Singleton的過多使用。根據我的經驗,這是一個主要的問題,它減少了系統的可測試性和面向對象特性。

Spring能消除使用各種各樣格式的屬性定製檔案的需要,在整個套用和工程中,可通過一種一致的方法來進行配置。曾經我們可能對類是否有某個屬性會感到迷惑,因此我們不得不去看它的javadoc或源碼。自從有了Spring,你可很簡單地看到類的JavaBean屬性。反轉控制的使用(在下面討論)幫助完成這種簡化。

Spring能通過接口而不是類促進好的編程習慣,減少編程代價到幾乎為零。

Spring被設計為讓使用它創建的套用儘可能少的依賴於他的APIs。在Spring套用中的大多數業務對象沒有依賴於Spring。

使用Spring構建的應用程式易於單元測試。

Spring能使EJB的使用成為一個實現選擇,而不是套用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。

Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web套用。例如,Spring能使用AOP提供聲明性事務而不通過使用EJB容器,如果你僅僅需要與單個的資料庫打交道,甚至不需要JTA實現。

Spring為數據存取提供了一致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。

Spring確實使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。

總結起來,Spring有如下優點:

1.低侵入式設計,代碼污染極低

2.獨立於各種套用伺服器,基於Spring框架的套用,可以真正實現Write Once,Run Anywhere的承諾

3.Spring的DI機制降低了業務對象替換的複雜性,提高了組件之間的解耦

4.Spring的AOP支持允許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的復用

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

6.Spring並不強制套用完全依賴於Spring,開發者可自由選用Spring框架的部分或全部

作用

spring spring

Spring提供許多功能,在此我將快速地依次展示其各個主要方面。

首先,讓我們明確Spring範圍。儘管Spring覆蓋了許多方面,但我們已經有清楚的概念,它什麼應該涉及和什麼不應該涉及。

Spring的主要目的是使JavaEE易用和促進好編程習慣。

Spring不重新開發已有的東西。因此,在Spring中你將發現沒有日誌記錄的包,沒有連線池,沒有分布事務調度。這些均有開源項目提供(例如Commons Logging 用來做所有的日誌輸出,或Commons DBCP用來作數據連線池),或由你的應用程式伺服器提供。因為同樣的的原因,我們沒有提供O/R mapping層,對此,已有友好的解決辦法如Hibernate和JDO。 Spring的目標是使已存在的技術更加易用

例如,儘管我們沒有底層事務協調處理,但我們提供了一個抽象層覆蓋了JTA或任何其他的事務策略。

Spring沒有直接和其他的開源項目競爭,除非我們感到我們能提供新的一些東西。例如,像許多開發人員,我們從來沒有為Struts高興過,並且感到在MVC web framework中還有改進的餘地。在某些領域,例如輕量級的IoC容器和AOP框架,Spring有直接的競爭,但是在這些領域還沒有已經較為流行的解決方案。(Spring在這些區域是開路先鋒。)

Spring也得益於內在的一致性。

所有的開發者都在唱同樣的的讚歌,基礎想法依然是Expert One-on-One J2EE設計與開發的那些。

並且我們已經能夠使用一些主要的概念,例如倒置控制,來處理多個領域。

Spring在套用伺服器之間是可移植的。

當然保證可移植性總是一次挑戰,但是我們避免任何特定平台或非標準化,並且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的套用伺服器上的用戶。

基本框架

Spring Spring

Spring 框架是一個分層架構,由 7 個定義良好的模組組成。Spring模組構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,如圖所示:

組成Spring框架的每個模組(或組件)都可以單獨存在,或者與其他一個或多個模組聯合實現。每個模組的功能如下:1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式代碼分開。

2、Spring 上下文:Spring 上下文是一個配置檔案,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。

3、Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持AOP。Spring AOP 模組為基於 Spring 的應用程式中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程式中。

4、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商拋出的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

5、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

6、Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模組還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

7、Spring MVC 框架:MVC框架是一個全功能的構建 Web應用程式的 MVC 實現。通過策略接口,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構成,存放於Map;視圖是一個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能可以用在任何J2EE伺服器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同J2EE 環境(Web 或EJB)、獨立應用程式、測試環境之間重用。

下載安裝

下載和安裝Spring請按如下步驟進行。

(1)登錄站點,下載Spring的最新穩定版本。最新版本為spring-framework-5.0.建議下載 spring-framework-spring-framework-4.0.0.M2-dist這個壓縮檔不僅包含Spring的開發包,而且包含Spring編譯和運行所依賴的第三方類庫。

解壓縮下載到的壓縮檔,解壓縮後的資料夾套用如下幾個資料夾。

dist:該資料夾下放Spring的jar包,通常只需要Spring.jar檔案即可。該資料夾下還有一些類似spring-Xxx.jar的壓縮檔, 這些壓縮檔是spring.jar壓縮檔的子模組壓縮檔。除非確定整個J2EE套用只需要使用Spring的某一方面時,才考慮使用這種分模組壓縮檔。通常建議使用Spring.jar

docs:該資料夾下包含spring的相關文檔、開發指南及API參考文檔。

lib:該資料夾下包含spring編譯和運行所依賴的第三方類庫,該路徑下的類庫並不是spring必需的,但如果需要使用第三方類庫的支持,這裡的類庫就是必需要的。

samples:該資料夾下包含Spring的幾個簡單例子,可作為Spring入門學習的案例。

src:該資料夾下包含Spring的全部源檔案,如果開發過程中有地方無法把握,可以參考該源檔案,了解底層實現。

spring spring

test:該資料夾下包含Spring的測試示例。

tiger:該路徑下存放關於JDK的相關內容

解壓縮後的資料夾下,還包含一些關於Spring的License和項目相關檔案

(2)將spring.jar複製到項目的CLASSPATH路徑下,對於Web套用,將spring.jar檔案複製到WEB-INF/lib路徑下,該套用即可以利用Spring框架了。

(3)通常Spring的框架還依賴於其他一些jar檔案,因此還須將lib下對應的包複製到WEB-INF/lib路徑下,具體要複製哪些jar檔案,取決於套用所需要使用的項目。通常需要複製cglib,dom4j,jakarta-commons,log4j等資料夾下的jar檔案。

(4)為了編譯java檔案,可以找到Spring的基礎類,將Spring.jar檔案的路徑添加到環境變數CLASSPATH中。當然,也可以使用ANT工具,但無須添加環境變數。如果使用Eclipse或者NetBeans等IDE時,也不需要設定環境變數。

Spring MVC

傳統的web架構的view 表現層使用struts作為表現層。但是如果試用下spring自帶的MVC,會發現spring 在一般場合完全可以取代struts。從某些角度來說,spring的mvc設計的更加合理,有興趣的話不妨嘗試下單個的spring的MVC。

套用實例

新建一個登入頁面:loginActionSupport.jsp,代碼如下

1.

新建一個登入頁面:loginActionSupport.jsp,代碼如下

<%@page contentType="text/html;charset=GBK" isELIgnored="false"%>

<html>

<head><title>;實現用戶登錄實例,struts和Spring整合</title></head>

spring spring

<body><font size=’22’> $<br> </font>

<form name="form1" action="/myLogin/loginActionSupportdo" method="post">

用戶名:<input type="text" name="username" value="${user.username}"/><br>

密碼:<input type="password" name="password" value="${user.password}"/><br>

<input type="submit" name=”method” value="提交"/>

</form>

</body>

</html>

2.創建一個存儲登入用戶信息的類:User.java該類繼承於ActionForm,代碼如下:

package com.zhaosoft.bean;

import org.apache.struts.action.ActionForm;

public class User extends ActionForm{

private String username=null;

private String password=null;

public String getUsername() {

spring spring

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;}

public void setPassword(String password) {

this.password = password;

}

}

3.Com.zhaosoft.action中新建一個LoginActionSupport.java,該類不繼承於struts的Action,而是繼承於Spring的ActionSupport,代碼示例如下:

package com.zhaosoft.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.springframework.context.ApplicationContext;

import org.springframework.web.struts.ActionSupport;

spring spring

import com.zhaosoft.bean.User;import com.zhaosoft.domain.Login;

public class LoginActionSupport extends ActionSupport {

public ActionForward execute(ActionMapping mapping,ActionFormform,

HttpServletRequest request,HttpServletResponse response)

throws Exception {

// 通過ApplicationContext獲取配置檔案

ApplicationContext ctx = getWebApplicationContext();

Login login = (Login) ctx.getBean("login");

spring spring

login.login((User) form);request.setAttribute("msg",login.getMsg());

request.setAttribute("user",(User) form);

return mapping.findForward("login");

}

}

主要產品

Spring Framework

Spring Web Flow

Spring Web Services

Spring Security (Acegi Security)

Spring Dynamic Modules For OSGi(tm) Service Platforms

Spring Batch

Spring Integration

spring spring

Spring LDAP* Spring IDE

Spring Modules

Spring JavaConfig

Spring Rich Client

Spring .NET

Spring BeanDoc

Spring .NET

Spring 並不是Java所特有的,它也套用於.NET平台。而且得到了很好的發展!

Spring DOTNET 是一個關注於.NET企業套用開發的應用程式框架。它能夠提供寬廣範圍的功能,例如依賴注入、面向切面編程(AOP)、數據訪問抽象,以及ASP DOTNET集成等。基於java的spring框架的核心概念和價值已被套用到.NET。Spring DOTNET 1.0 包含一個完全功能的依賴注入容器和AOP庫。後續的發布將包含對ASP DOTNET、Remoting和數據訪問的支持。

步驟

Spring確實使你能通過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。同時他的原始碼的設計理念也受到很多程式設計師的追捧,簡潔,易用.可是從哪著手研究Spring卻是很多新手頭疼的地方,下面的參考資料將帶領大家慢慢的深入解析Spring

spring spring

1 Spring中的事務處理

2 IoC容器在Web容器中的啟動

3 Spring JDBC

4 Spring MVC

5 Spring AOP獲取Proxy

6 Spring聲明式事務處理

7 Spring AOP中對攔截器調用的實現

8 Spring驅動Hibernate的實現

9 Spring Acegi框架鑒權的實現

IOC和AOP

控制反轉模式(也稱作依賴性注入)的基本概念是:不創建對象,但是描述創建它們的方式。在代碼中不直接與對象和服務連線,但在配置檔案中描述哪一個組件需要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一起。在典型的 IOC 場景中,容器創建了所有對象,並設定必要的屬性將它們連線在一起,決定什麼時間調用方法。下表列出了 IOC 的一個實現模式。

類型 1 服務需要實現專門的接口,通過接口,由對象提供這些服務,可以從對象查詢依賴性(例如,需要的附加服務)【接口注入】。
類型 2 通過JavaBean的屬性(例如 setter 方法)分配依賴性【setter方法注入】。
類型 3 依賴性以構造函式的形式提供,不以 JavaBean 屬性的形式公開【構造器注入】。

Spring 框架的 IOC 容器採用類型 2 和類型3 實現。

面向切面的編程,即 AOP,是一種編程技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。

AOP 和 IOC 是補充性的技術,它們都運用模組化方式解決企業應用程式開發中的複雜問題。在典型的面向對象開發方式中,可能要將日誌記錄語句放在所有方法和 Java 類中才能實現日誌功能。在 AOP 方式中,可以反過來將日誌服務模組化,並以聲明的方式將它們套用到需要日誌的組件上。當然,優勢就是 Java 類不需要知道日誌服務的存在,也不需要考慮相關的代碼。所以,用 Spring AOP 編寫的應用程式代碼是鬆散耦合的。

AOP 的功能完全集成到了 Spring事務管理、日誌和其他各種特性的上下文中。

AOP 編程方面, Spring 提供了很多特性,例如 PointCut, Advice, Advisor, 粗略來說就是事務管理、日誌和其他各種特性 的切入地點。

容器

Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 組件一起使用。這個包通常不是由用戶直接使用,而是由伺服器將其用作其他多數功能的底層中介。下一個最高級抽象是BeanFactory接口,它是工廠設計模式的實現,允許通過名稱創建和檢索對象。BeanFactory 也可以管理對象之間的關係。

BeanFactory 支持兩個對象模型。

1、單態模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認的也是最常用的對象模型。對於無狀態服務對象很理想。

2、原型模型確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。

bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 將處理事情的責任從應用程式代碼轉移到框架。

相關詞條

熱門詞條

聯絡我們