spring IOC的常見幾種以來注入的方式

來源:互聯網
上載者:User

標籤:style   javabean   rri   常見   manager   完整   for   span   adduser   

在spring ioc中有三種依賴注入,分別是:
a、介面注入;
b、setter方法注入;
c、構造方法注入;

 

介面注入:

public class ClassA {    private InterfaceB clzB;    public void doSomething() {      Ojbect obj = Class.forName(Config.BImplementation).newInstance();      clzB = (InterfaceB)obj;      clzB.doIt();     }  ……  } 

解釋一下上述的代碼部分,ClassA依賴於InterfaceB的實現,我們如何獲得InterfaceB的實現執行個體呢?傳統的方法是在代碼中建立 InterfaceB實作類別的執行個體,並將賦予clzB.這樣一來,ClassA在編譯期即依賴於InterfaceB的實現。為了將調用者與實現者在編譯期分離,於是有了上面的代碼。我們根據預先在設定檔中設定的實作類別的類名(Config.BImplementation),動態載入實作類別,並通過InterfaceB強制轉型後為ClassA所用,這就是介面注入的一個最原始的雛形。

 

 

setter方法注入

import com.tgb.spring.dao.UserDao;        public class UserManagerImpl implements UserManager{            private UserDao userDao;            //使用設值方式賦值        public void setUserDao(UserDao userDao) {            this.userDao = userDao;        }                @Override        public void addUser(String userName, String password) {                userDao.addUser(userName, password);        }    }    

 

 

構造器注入

import com.tgb.spring.dao.UserDao;                public class UserManagerImpl implements UserManager{                    private UserDao userDao;                    //使用構造方式賦值            public UserManagerImpl(UserDao userDao) {                this.userDao = userDao;            }                    @Override            public void addUser(String userName, String password) {                        userDao.addUser(userName, password);            }        }    

 

 

 

三者之間的比較:

介面注入:
介面注入模式因為具備侵入性,它要求組件必須與特定的介面相關聯,因此並不被看好,實際使用有限。


Setter 注入:
對於習慣了傳統 javabean 開發的程式員,通過 setter 方法設定依賴關係更加直觀。如果依賴關係較為複雜,那麼構造子注入模式的建構函式也會相當龐大,而此時設值注入模式則更為簡潔。如果用到了第三方類庫,可能要求我們的組件提供一個預設的建構函式,此時構造子注入模式也不適用。


構造器注入:
在構造期間完成一個完整的、合法的對象。所有依賴關係在建構函式中集中呈現。依賴關係在構造時由容器一次性設定,組件被建立之後一直處於相對“不變”的穩定點。只有組件的建立者關心其內部依賴關係,對調用者而言,該依賴關係處於“黑盒”之中。

 

 

個人推薦使用第三種,博主本人的企業專案中也是使用第三種方式。

 

spring IOC的常見幾種以來注入的方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.