我可以在bean被折断时用空的弹簧供应@autowed构造函数



我正在开发一个应该隐藏在FeatureToggleX后面的新功能。作为其中的一部分,我需要在我的SomeClass中添加一个新的依赖性b

class SomeClass {
  private OldDependency a;
  private NewDependency b;
  @Autowired
  public SomeClass(OldDependency a, NewDependency b) {
    this.a = a;
    this.b = b;
  }
}

我使用自定义IfActive注释作为Conditional,当时使用TheToggledDependency,并且只有当FeatureToggleX处于活动状态时:

@Component
@IfActive("FeatureToggleX")
class TheToggledDependency implements NewDependency {
}

FeatureToggleX关闭时,如何使Spring临时导线b = null

是否有一种干净的方法将通用解决方案插入春季的接线过程中,该过程检测IfActive组件并在其位置提供null S?


  • 按照其他答案中的建议,我考虑了@Autowired(required = false)-也许与Overloading SomeClass的构造函数结合使用 - 允许省略b,但这具有副作用,即它还合法地省略了a,这应该是错误。

  • 我可以提供NewDependency的替代虚拟IfInactive变体,但这将使我的项目充满毫无价值的假人,我需要记住,当删除切换时,我需要记住。

  • 同样,我可以构建两个SomeClass的变体,一个具有NewDependency,第二个完全不知道它,并根据切换在两个方面进行选择。但是,这对于较大的类是不切实际的,因为它复制了其他不受影响的功能。

no,至少在构造函数中没有。处理这种事情的一种方法是设置器注入。

这样您就会有这样的东西(在这里鸭式):

class SomeClass {

  private OldDependency a;
  private NewDependency b;
  @Autowired
  public SomeClass(OldDependency a) {
    this.a = a;
  }
  @Autorired(required=false)
  public void setNewDependency(NewDependency b) {
   this.b = b;
  }
}

我希望这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新