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


在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 方法設定依賴關系更加直觀。如果依賴關系較為復雜,那么構造子注入模式的構造函數也會相當龐大,而此時設值注入模式則更為簡潔。如果用到了第三方類庫,可能要求我們的組件提供一個默認的構造函數,此時構造子注入模式也不適用。


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

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM