在@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注射或田间注射做得更好。也许,看起来像...
public MainService(NonOptionalBean1 b1, NonOptionalBean2 b2,
..., @Optional ComponentA a, @Optional ComponentB b) { ... }
答案 0 :(得分:1)
您可以在Spring中使用Optional<YourOptionalBean>
。它可以与构造函数注入一起使用。