【问题标题】:unsure of concept of constructor args in spring beans不确定 Spring bean 中构造函数 args 的概念
【发布时间】:2014-11-13 15:43:32
【问题描述】:

在观看了各种教程并阅读了一些资料后,我了解了如何在 spring 中使用构造函数参数。那里没有问题。 我的问题是有人可以解释或指出一些材料来解释为什么使用它们。我的意思是,肯定是这样的语法:<constructor-arg value="threading"></constructor-arg>,硬编码值是不好的做法? 我不想要关于如何做到这一点的任何关于 spring 的文章。我只需要一个简单的答案来解释为什么硬编码在这里看起来不错或更好的解决方案。我知道 @Resource 注释消除了对诸如 <property name="answer" ref="answer"></property> 之类的行的需要,但我一直被教导硬编码是个坏主意,例如从数据库中提取是一个更好的解决方案

<bean id="questions" class="main.Questions">
        <constructor-arg value="0000"></constructor-arg>
        <constructor-arg value="What is the question?"></constructor-arg>
        <constructor-arg value="threading"></constructor-arg>
        <property name="correctAnswer" value="deadlock"></property>

</bean>

【问题讨论】:

  • 也许Beans.xml 文件数据库?还是你应该这样想?我不确定(我是 Spring 的初学者)。

标签: java spring spring-mvc annotations constructorargument


【解决方案1】:

这不是硬编码...我花了一点时间才弄明白你的意思,但请查看这篇 wiki 文章:

http://en.wikipedia.org/wiki/Hard_coding

通过在 XML 中提供构造函数/属性注入值作为文字,您无需进行硬编码,因为 XML 用作外部化数据源。实际上,这与数据库中某个字段中的值没有什么不同。如果您在 XML 中对其进行修改,则无需重新编译代码即可使其正常工作。

【讨论】:

  • 让我更明确一点。现在看看我的问题,看看我放在那里的豆子。构造函数 args 有值。现在,如果我想用 @Resource 注释替换它们,那么我会将值放在哪里??
  • 我不明白这与您的 OP 有何关系。使用不同类型的依赖注入与 XML 作为外部化数据源无关,因此与硬编码无关。 XML 构造函数 args 的要点是您可以更改 XML 中的值,并重新加载 bean(重新启动或通过其他方法),并且您不需要重新编译代码。将其更改为使用 @Resource 注释是代码更改......有点像苹果和橘子。
  • @RedBaron 使用 SpEL 表达式作为值。
  • @MarkW 我正处于一个阶段,我对 Spring 还很陌生,并且正在研究它的概念和想法。我知道 atResource 不是 Spring 的一部分,但我已经弄清楚构造函数参数是如何工作的,所以现在想看看如何摆脱构造函数参数并仍然保持我认为可能的值。是的,很抱歉与原始问题相去甚远。我也使用 atResource 作为 stackoverflow 不会让我使用另一个 at 符号
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2017-09-07
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多