麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Spring的核心機制依賴注入簡介

2019-11-18 14:12:02
字體:
來源:轉載
供稿:網友

  SPRing能有效地組織J2EE應用各層的對象。不管是控制層的Action對象,還是業務層的Service對象,還是持久層的DAO對象,都可在Spring的治理下有機地協調、運行。Spring將各層的對象以松耦合的方式組織在一起,Action對象無須關心Service對象的具體實現,Service對象無須關心持久層對象的具體實現,各層對象的調用完全面向接口。當系統需要重構時,代碼的改寫量將大大減少。

  上面所說的一切都得宜于Spring的核心機制,依靠注入。依靠注入讓bean與bean之間以配置文件組織在一起,而不是以硬編碼的方式耦合在一起。理解依靠注入

  依靠注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個java實例,調用者)需要另一個角色(另一個Java實例,被調用者)的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring里,創建被調用者的工作不再由調用者來完成,因此稱為控制反轉;創建被調用者實例的工作通常由Spring容器來完成,然后注入調用者,因此也稱為依靠注入。

  不管是依靠注入,還是控制反轉,都說明Spring采用動態、靈活的方式來治理各種對象。對象與對象之間的具體實現互相透明。在理解依靠注入之前,看如下這個問題在各種社會形態里如何解決:一個人(Java實例,調用者)需要一把斧子(Java實例,被調用者)。

  (1)原始社會里,幾乎沒有社會分工。需要斧子的人(調用者)只能自己去磨一把斧子(被調用者)。對應的情形為:Java程序里的調用者自己創建被調用者。

  (2)進入工業社會,工廠出現。斧子不再由普通人完成,而在工廠里被生產出來,此時需要斧子的人(調用者)找到工廠,購買斧子,無須關心斧子的制造過程。對應Java程序的簡單工廠的設計模式。

  (3)進入“按需分配”社會,需要斧子的人不需要找到工廠,坐在家里發出一個簡單指令:需要斧子。斧子就自然出現在他面前。對應Spring的依靠注入。

  第一種情況下,Java實例的調用者創建被調用的Java實例,必然要求被調用的Java類出現在調用者的代碼里。無法實現二者之間的松耦合。

  第二種情況下,調用者無須關心被調用者具體實現過程,只需要找到符合某種標準(接口)的實例,即可使用。此時調用的代碼面向接口編程,可以讓調用者和被調用者解耦,這也是工廠模式大量使用的原因。但調用者需要自己定位工廠,調用者與特定工廠耦合在一起。

  第三種情況下,調用者無須自己定位工廠,程序運行到需要被調用者時,系統自動提供被調用者實例。事實上,調用者和被調用者都處于Spring的治理下,二者之間的依靠關系由Spring提供。

  所謂依靠注入,是指程序運行過程中,假如需要調用另一個對象協助時,無須在代碼中創建被調用者,而是依靠于外部的注入。Spring的依靠注入對調用者和被調用者幾乎沒有任何要求,完全支持對POJO之間依靠關系的治理。依靠注入通常有兩種:

  ·設值注入。

  ·構造注入。 設值注入

  設值注入是指通過setter方法傳入被調用者的實例。這種注入方式簡單、直觀,因而在Spring的依靠注入里大量使用。看下面代碼,是Person的接口

//定義Person接口
public interface Person
{
 //Person接口里定義一個使用斧子的方法
 public void useAxe();
}


  然后是Axe的接口

//定義Axe接口

public interface Axe
{
 //Axe接口里有個砍的方法
 public void chop();
}
  Person的實現類

//Chinese實現Person接口

public class Chinese implements Person
{
 //面向Axe接口編程,而不是具體的實現類
 private Axe axe;
 //默認的構造器
 public Chinese()
 {}
 //設值注入所需的setter方法
 public void setAxe(Axe axe)
 {
  this.axe = axe;
 }
 //實現Person接口的useAxe方法
 public void useAxe()
 {
  System.out.println(axe.chop());
 }
}
  Axe的第一個實現類

//Axe的第一個實現類 StoneAxe

public class StoneAxe implements Axe
{
 //默認構造器
 public StoneAxe()
 {}
 //實現Axe接口的chop方法
 public String chop()
 {
  return "石斧砍柴好慢";
 }
}
  下面采用Spring的配置文件將Person實例和Axe實例組織在一起。配置文件如下所示:

<!-- 下面是標準的xml文件頭 -->
<?xml version="1.0" encoding="gb2312"?>
<!-- 下面一行定義Spring的XML配置文件的dtd -->
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 以上三行對所有的Spring配置文件都是相同的 -->
<!-- Spring配置文件的根元素 -->
<BEANS>
 <!—定義第一bean,該bean的id是chinese, class指定該bean實例的實現類 -->
 <BEAN class=lee.Chinese id=chinese>
 <!-- property元素用來指定需要容器注入的屬性,axe屬性需要容器注入此處是設值注入,因此Chinese類必須擁有setAxe方法 -->

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人福利视频在线观看 | 久久国产精品二区 | 在线播放91 | 成人国产精品久久 | 精品国产乱码久久久久久丨区2区 | 国产麻豆交换夫妇 | 蜜桃网站免费 | 欧美日韩在线看片 | 在线播放黄色片 | 精品久久久av | 国产亚洲精品久久久久久久久久 | 日本精品久久久一区二区三区 | 国产精品91久久久 | 在线观看国产一区二区 | 黄色大片在线免费观看 | 亚洲欧洲av在线 | 亚洲午夜电影 | 欧美中文字幕一区二区三区亚洲 | 久久国产精品成人免费网站 | 精品国产一区二区三区四区在线 | 欧美性受xxxx人人本视频 | 国产免费美女 | xxnxx中国18 | 久久久久久久久久亚洲精品 | 一级黄色在线观看 | 天堂成人国产精品一区 | 视频久久免费 | 日日鲁一鲁视频 | 得得啪在线| 毛片118极品美女写真 | 黄色欧美精品 | 国产精品热 | 亚洲一区在线视频观看 | 古装三级在线观看 | 港台三级在线观看 | 国产成人精品区一区二区不卡 | 91福利免费视频 | 日韩黄色成人 | 午夜激情视频免费 | 999插插插 | 国产精品av久久久久久久久久 |