天天看點

使用構造方法還是set注入?

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方法,所有的依賴關系全部在構造器内設定,是以,不用擔心後續代碼對依賴關系的破壞。

依賴關系隻能在構造器中設定,則隻有元件的建立者才能改變元件的依賴關系。對元件的調用者而言,元件内部的依賴關系完全透明,更符合高内聚的原則;

建議采用以設定注入為主,構造注入為輔的注入政策。對于依賴關系無須變化的注入,盡量采用構造注入;而其他的依賴關系的注入,則考慮采用設定注入。