簡體   English   中英

Spring setter依賴注入和不可變對象

[英]Spring setter dependency injection and immutable object

我們知道,Spring團隊建議在現場注入中使用二傳手注入:

http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/beans.html#d0e2778

這也是通過注入模擬進行單元測試所需要的。

但是,讓我煩惱的是,由於彈簧bean是單例,因此如果在代碼的某些部分中,通過使用setter方法注入不同的依賴關系來重新配置單例bean,那么代碼的其他部分將成為影響,這可能是不必要的。 例如,在代碼的某些部分中注入了特定的時鍾實例,但在代碼的其他部分中可能不希望使用這種特定類型的時鍾。

因此,看起來像是二傳手注,這為高風險業務留下了一些機會。 同時,我們需要一種在測試過程中注入一些模擬的機制。 我們如何才能取得平衡?

此外,我們知道可變對象是不可取的:

http://www.javapractices.com/topic/TopicAction.do?Id=15

那么使用可用於單例bean的setter方法是否不錯?

在這里聽起來有些混亂,一方面您說:

通過注入模擬進行單元測試

在這里,您可以使用Mockito或標准JUnit測試來創建實例並注入適當的依賴項。

但是隨后您繼續說:

代碼的其他部分將受到影響,這可能是不希望的

不是完全的單元測試,但是您可以將Spring Test支持與@DirtiesContext結合使用,以確保如果您在一個測試中更改了依賴關系,那么將為下一個測試重新加載上下文。

如果您確實需要更改實例字段但沒有設置器,那么作為最后的選擇,您仍然可以在測試過程中使用ReflectionTestUtils更新字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM