學習Spring 開發指南------基礎語義
Dependency Injection
依賴注入的幾種實現型別
Type1 介面注入
Type2 構造子注入
Type3 設值注入
幾種依賴注入模式的對比總結
Spring Bean封裝機制
Bean Wrapper
Bean Factory
ApplicationContext Web Context
Component元件
IoC,用白話來講,就是由容器控制程式之間的關係,而非傳統實現中,由程式程式碼直接操控。這也就是所謂“控制反轉”的概念所在:控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。
依賴注入機制減輕了元件之間的依賴關係,同時也大大提高了元件的可移植性,這意味著,元件得到重用的機會將會更多。
依賴注入的幾種實現型別
Type1 介面注入
常藉助介面來將呼叫者與實現者分離。如:
public class ClassA
{
private InterfaceB clzB;
public init() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
}
}
Type2 構造子注入
透過建構函式完成依賴關係的設定
public class DIByConstructor
{
private final DataSource dataSource;
private final String message;
public DIByConstructor(DataSource ds, String msg)
{
this.dataSource = ds;
this.message = msg;
}
}
Type3 設值注入
即透過類的setter方法完成依賴關係的設定。
幾種依賴注入模式的對比總結
介面注入模式因為具備侵入性,它要求元件必須與特定的介面相關聯,因此並不被看好,實際使用有限。
Type2和Type3的依賴注入實現模式均具備無侵入性的特點。在筆者看來,這兩種實現方式各有特點,也各具優勢(一句經典廢話)。
Spring Bean 封裝機制----Bean Wrapper
Bean Factory
為了實現無侵入性的目標。Spring 大量引入了Java 的Reflection機制,透過動態呼叫的方式避免硬編碼方式的約束,並在此基礎上建立了其核心元件BeanFactory,以此作為其依賴注入機制的實現基礎。
org.springframework.beans包中包括了這些核心元件的實現類,核心中的核心為BeanWrapper和BeanFactory類。
如果動態設定一個物件屬性,可以藉助Java的Reflection機制完成:
Class cls = Class.forName("net.xiaxin.beans.User");
Method mtd = cls.getMethod("setName",new Class[]{String.class});
Object obj = (Object)cls.newInstance();
mtd.invoke(obj,new Object[]{"Erica"});
return obj;
如何透過Spring BeanWrapper操作一個JavaBean:
Object obj = Class.forName("net.xiaxin.beans.User").newInstance();
BeanWrapper bw = new BeanWrapperImpl(obj);
bw.setPropertyValue("name", "Erica");
System.out.println("User name=>"+bw.getPropertyValue("name"));
Bean Factory,顧名思義,負責建立並維護Bean例項。
Bean Factory負責根據配置檔案建立Bean例項,可以配置的專案有:
1.Bean屬性值及依賴關係(對其他Bean的引用)
2.Bean建立模式(是否Singleton模式,即是否只針對指定類維持全域性唯一的例項)
3.Bean初始化和銷燬方法
4.Bean的依賴關係
class="net.xiaxin.spring.qs.UpperAction" ⑵
singleton="true" ⑶
init-method="init" ⑷
destroy-method="cleanup" ⑸
depends-on="ActionManager" ⑹
>
⑻
InputStream is = new FileInputStream("bean.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
Action action = (Action) factory.getBean("TheAction");
ApplicationContext
BeanFactory提供了針對Java Bean的管理功能,而ApplicationContext提供了一個更為框架化的實現 ApplicationContext覆蓋了BeanFactory的所有功能,並提供了更多的特性。此外,ApplicationContext為與現有應用框架相整合,提供了更為開放式的實現
如對於Web應用,我們可以在web.xml中對ApplicationContext進行配置.
Web Context
ApplicationContext透過編碼載入。
對於Web應用,Spring提供了可配置的ApplicationContext載入機制。
載入器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。
這兩者在功能上完全等同,只是一個是基於Servlet2.3版本中新引入的Listener介面實現,而另一個基於Servlet介面實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219138/viewspace-914323/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習Spring 開發指南------Spring初探Spring
- Spring Boot 學習-基礎Spring Boot
- java 基礎 與 開發框架學習Java框架
- 學習Rust 基礎語法Rust
- 語料庫基礎學習
- java語言基礎學習Java
- markdown學習(基礎語法)
- c語言基礎學習C語言
- Java學習之基礎語法Java
- Java開發學習(十)----基於註解開發定義beanJavaBean
- plsql開發語言基礎SQL
- Java學習之基礎語法練習Java
- Spring boot學習(二) Spring boot基礎配置Spring Boot
- Spring入門學習手冊 6:Spring MVC基礎中的基礎SpringMVC
- go 學習記錄--基礎語法Go
- go語言學習-基礎知識Go
- Python基礎學習【4】-if 語句Python
- Java學習--jsp基礎語法JavaJS
- Go 基礎語言學習筆記Go筆記
- Hive學習筆記:基礎語法Hive筆記
- SQL語句基礎學習之TRIMSQL
- Spring mvc學習指南SpringMVC
- C語言0基礎入門遊戲輔助開發—學習筆記01C語言遊戲筆記
- 零基礎小白java培訓學習指南Java
- 零基礎如何學習好Python開發?Python
- 零基礎怎麼學習web前端開發?Web前端
- 零基礎學習java軟體開發攻略Java
- 新手指南基礎學
- 【學習】SQL基礎-017-同義詞SQL
- JAVA基礎學習筆記 一 計算機基礎、JAVA開發環境、開發注意事項Java筆記計算機開發環境
- Spring基礎複習Spring
- c語言程式基礎學習筆記C語言筆記
- 學習python的基礎語法集合Python
- Scala學習筆記(2)-基礎語法筆記
- Kotlin學習筆記-基礎語法Kotlin筆記
- Markdown 基礎語法的學習和使用
- 零基礎入門web開發(4)——學習JavaScriptWebJavaScript
- 零基礎如何系統地學習前端開發?前端