1. 程式人生 > >7.28.1 Spring構造註入還是設置註入

7.28.1 Spring構造註入還是設置註入

void 原則 介紹 完全 ger 發生 sta range 註入

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

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

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

樓主你說的私有變量 也叫狀態,而方法叫做行為;
你也知道,一個類的私有變量在類外部是無法訪問的,也就是無法直接修改私有變量;
而構造對象的時候,有些狀態是必須的,或在對象生命周期中不會修改的狀態,在構造對象時對其進行初始化更方便,更安全(沒有其他方法可以改變,只能在構造函數中初始化,或setXXX()都是private修飾);
有些狀態是可選的,或臨時的,對象在其生命周期中是可發生改變的,所以需要更改器方法(setXXX())來對其值進行修改;

比如說,設計一個Person類時,如果要求身份證號,姓名和性別 是必需初始化的,且不會改變的;而地址,E-Mail,電話號等是可選的;你說怎麽設計最好呢?

來源: http://blog.sina.com.cn/s/blog_6f93edb60101gxct.html

7.28.1 Spring構造註入還是設置註入