1.
構造方法注入代碼如下:public UserManagerImpl(UserDao userDao) {
this.userDao = userDao;
}
set注入代碼如下: public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
構造方法注入與set注入的差別:構造方法注入的方式,在new UserManagerImpl對象的同時,就把userDao對象 傳給UserManagerImpl這個正在new的對象,它的時機比較早。
構造方法注入: 先把UserManagerImpl建立好以後,再調用set方法。
2.
使用構造方法注入的理由:
n 構造方法注入使用強依賴規定,如果不給足夠的參數,對象則無法建立。
n 由于Bean的依賴都通過構造方法設定了,那麼就不用寫更多的set方法,有助于減少代碼量。
使用set注入的理由:
n 如果Bean有很多的依賴,那麼構造方法的參數清單會變的很長。
n 如果一個對象有多種構造方法,構造方法會造成代碼量增加。
n 如果構造方法中有兩個以上的參數類型相同,那麼将很難确定參數的用途。
n ……
Spring官方更推薦使用set注入。
3.
下面對spring依賴注入的兩種方式進行一些介紹和比對。Spring依賴注入的兩種方式是:
3.1.設定注入;
3.2 .構造注入;
spring依賴注入之設定注入的優點:
與傳統的JavaBean的寫法更相似,程式員更容易了解、接受,通過setter方式設定依賴關系顯得更加直覺、明顯;
對于複雜的依賴關系,如果采用構造注入,會導緻構造器過于臃腫,難以閱讀。Spring在建立Bean執行個體時,需要同時執行個體化其依賴的全部執行個體,因而導緻死你功能下降。而使用設定注入,則避免這下問題;
尤其在某些屬性可選的情況下,多參數的構造器更加笨拙。
spring依賴注入之構造注入的優點:
構造注入可以再構造器中決定依賴關系的注入順序,優先依賴的優先注入。
對于依賴關系無須變化的Bean,構造注入更有用處;因為沒有setter方法,所有的依賴關系全部在構造器内設定,是以,不用擔心後續代碼對依賴關系的破壞。
依賴關系隻能在構造器中設定,則隻有元件的建立者才能改變元件的依賴關系。對元件的調用者而言,元件内部的依賴關系完全透明,更符合高内聚的原則;
建議采用以設定注入為主,構造注入為輔的注入政策。對于依賴關系無須變化的注入,盡量采用構造注入;而其他的依賴關系的注入,則考慮采用設定注入。