进口彩妆做的好的网站,做网站买虚拟服务器,wordpress d8 修改,建设茶叶网站目的Autowired注释使我们的生活更轻松。 如果我们在类的属性上使用它#xff0c;也可能导致代码量减少。 我们既不需要构造函数也不需要setter方法。 乍一看看起来很棒#xff0c;但好处很少是没有成本的。 今天#xff0c;我想让您知道必须支付的费用。 Autowired#xff08… Autowired注释使我们的生活更轻松。 如果我们在类的属性上使用它也可能导致代码量减少。 我们既不需要构造函数也不需要setter方法。 乍一看看起来很棒但好处很少是没有成本的。 今天我想让您知道必须支付的费用。 Autowired必填 false 默认情况下 Autowired批注将required元素设置为true这意味着需要注释的依赖项。 但是我们可以关闭默认行为并将依赖项设为可选如下所示 Autowired(requiredfalse)
private Dependency dependency; 它很有用并且由于并非总是需要所有依赖项因此引入这种可能性是合理的。 那么以这种方式注释依赖项又是什么问题呢 让我们看一下代码 class SomeClass {Autowired private DependencyA dependencyA;Autowired private DependencyB dependencyB;Autowired(requiredfalse)private DependencyC dependencyC;Autowired(requiredfalse)private DependencyD dependencyD;
} 我们可以创建具有以下依赖关系的SomeClass实例允许所有组合 DependencyADependencyB DependencyADependencyBDependencyC DependencyADependencyBDependencyD DependencyADependencyBDependencyCDependencyD 这一切都很好但是您确定所有这些组合确实可用并且正确吗 如果班级作者只考虑1和4怎么办 可选的依赖项-正确执行 如果我们正在考虑上一段中提供的示例则对于所提问题有两个可能的答案 所有组合都是可能的。 组合的子集是可能的。 如果所有组合都可行我将保持原样。 如果没有什么可以出错的并且对象的每个状态都是正确的那么我们的代码就具有足够的描述性。 它显然允许任何事情因此我们可以假设我们将做的任何事情都会导致我们可以使用的对象的创建。 第二点-组合的子集呢 假定仅从点1和点4开始创建状态的对象是有效对象。 照原样保留代码可能会导致对象的错误使用。 我们允许创建处于无效状态第2点和第3点的对象。 我们对此可以做什么 在那种情况下我认为我们应该删除Autowired注释。 为了代码的可读性和设计质量最好使用构造函数 class SomeClass {private DependencyA dependencyA;private DependencyB dependencyB;private DependencyC dependencyC;private DependencyD dependencyD;public SomeClass(DependencyA dependencyA, DependencyB dependencyB) {this.dependencyA dependencyA;this.dependencyB dependencyB;}public SomeClass(DependencyA dependencyA, DependencyB dependencyB, DependencyC dependencyC, DependencyD dependencyD) {this(dependencyA, dependencyB);this.dependencyC dependencyC;this.dependencyD dependencyD;}
} 有了这段代码您就知道了一切。 您知道创建正确对象所需的依赖项。 保持警惕 本文无意让您相信最好不要使用Autowiredrequired false。 其目的是使您知道必须支付的费用。 您必须保护自己的设计必须保护对象不变式并且不应该允许对象处于无效状态。 当然您可以添加文档或注释但是如果我们已经有了该语言提供的语义可以使我们无需付出额外的努力即可使用它。 翻译自: https://www.javacodegeeks.com/2016/03/autowired-optional-dependencies.html