簡體   English   中英

使用條件Bean自動裝配構造函數

[英]Autowiring Constructor With Conditional Beans

@Service ,我想包含兩個@Component ,例如ComponentAComponentB

這兩個組件都取決於某個屬性(例如,某個環境變量;這意味着如果未設置這些環境變量,則這些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.

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