[英]Autowiring Constructor With Conditional Beans
在@Service
,我想包含兩個@Component
,例如ComponentA
和ComponentB
。
這兩個組件都取決於某個屬性(例如,某個環境變量;這意味着如果未設置這些環境變量,則這些bean不存在)。
在該服務中,還有其他自動有線bean,這不是可選的。 鑒於我正在使用構造函數依賴項注入,因此我不想創建多個構造函數,而是指示Spring在實例化我的服務時使用null
。 以下作品:
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
..., ComponentA a, ComponentB b) { ... }
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
..., ComponentA a) { ... }
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
..., ComponentB b) { ... }
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
...) { ... }
但這需要創建四個構造函數,具體取決於存在多少條件Bean(兩者都不是,確切地說是一個)。 這行得通,但是通常情況下需要成倍數量的構造函數-我只能假設有更好的方法。
考慮到田間注射的弊端,以及我希望使注射的豆子保持final
願望,我希望比使用setter-injection或field-injection做得更好。 也許,看起來像...
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
..., @Optional ComponentA a, @Optional ComponentB b) { ... }
您可以將Optional<YourOptionalBean>
與Spring一起使用。 它與構造函數注入一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.