古詩詞大全網 - 成語查詢 - net依賴註入的優點?

net依賴註入的優點?

依賴註入是指在創建壹個對象時,自動地創建它依賴的對象,並註入。

大家都知道有三種途徑來實現依賴註入,我這裏總結壹下這三種方式的優缺點:

1.構造方法註入:

優點:

在構造方法中體現出對其他類的依賴,壹眼就能看出這個類需要其他那些類才能工作。

脫離了IOC框架,這個類仍然可以工作,POJO的概念。

壹旦對象初始化成功了,這個對象的狀態肯定是正確的。

缺點:

構造函數會有很多參數(Badsmell)。

有些類是需要默認構造函數的,比如MVC框架的Controller類,壹旦使用構造函數註入,就無法使用默認構造函數。

這個類裏面的有些方法並不需要用到這些依賴(Badsmell)。

2.Set方法註入:

優點:

在對象的整個生命周期內,可以隨時動態的改變依賴。

非常靈活。

缺點:

對象在創建後,被設置依賴對象之前這段時間狀態是不對的。

不直觀,無法清晰地表示哪些屬性是必須的。

3.方法參數註入:

方法參數註入的意思是在創建對象後,通過自動調用某個方法來註入依賴。類似如下代碼。

publicclassMovieRecommender{

privateMovieCatalogmovieCatalog;

privateCustomerPreferenceDaocustomerPreferenceDao;

@Autowired

publicvoidprepare(MovieCatalogmovieCatalog,

CustomerPreferenceDaocustomerPreferenceDao){

this.movieCatalog=movieCatalog;

this.customerPreferenceDao=customerPreferenceDao;

}

//...

}

這種方式介於Set方法註入和構造方法註入之間。比如說我們通常會用壹個Init方法來接受依賴的參數。

這種方法可能不太常用,壹般是只有壹個方法依賴到註入的對象時用到,如果有多個方法依賴到註入的對象,還是比較傾向於使用構造方法註入。

優點:

比較靈活。

缺點:

新加入依賴時會破壞原有的方法簽名,如果這個方法已經被其他很多模塊用到就很麻煩。

與構造方法註入壹樣,會有很多參數。

我個人很不傾向於在業務邏輯層中應用Autowired或者是Inject這樣的annotation(Attribute)來實現註入,

因為壹旦脫離了IOC框架,代碼就無法重用了。