Java:在XML中定义bean是一种好习惯吗?

时间:2011-01-25 14:42:45

标签: java xml unit-testing javabeans

在我正在开发的一个项目中,使用Spring,我看到了一些令人难以置信的东西。显然,有些单元测试需要bean才能工作,而这些bean是从XML文件创建的,包含以下内容:

<bean class="...ListDTO">
 <constructor-arg>
  <map>
   <entry key="use1key">
    <value>use1value</value>
   </entry>
   <entry key="use2key">
    <value>use2value</value>
   </entry>
  </map>
 </constructor-arg>
 <constructor-arg>
  <map>
   <entry key="nature1key">
    <value>nature1value</value>
   </entry>
   <entry key="nature2key">
    <value>nature2value</value>
   </entry>
  </map>
 </constructor-arg>
 <constructor-arg>
  <value>false</value>
 </constructor-arg>
</bean>

发生了什么?类的构造函数... ListDTO已更改,因此显然无法从此(非常详细的恕我直言)XML中创建bean。

有人可以解释一下为什么将这样的东西放在XML而不是Java代码中是一种好的做法(它真的吗?)?如果是在Java代码中,只要... ListDTO改变了单元测试就会拒绝编译(即使实例化那个bean的单元测试部分没有被执行[无论出于何种原因])。

奖金问题:除了运行所有单元测试之外,有没有办法在项目中轻松找到所有这些破碎的“XML中的bean”,看看哪些失败然后冲洗并重复?

对我来说,似乎是一个非常严重的问题,你可以改变一个构造函数,并且IDE会表现得好像一切都很好:这有什么理由呢? (*)

3 个答案:

答案 0 :(得分:6)

这背后的想法是在中央XML配置文件中保留环境(开发,测试,生产)之间的不同,并且通过使用不同的配置文件,您可以切换环境。

但是,使用bean配置来定义复杂的测试数据结构绝对不是一个好习惯。有人可能会在新注入依赖注入的同时做到这一点,只是因为它是可能的。

答案 1 :(得分:1)

  

奖金问题:除了运行所有单元测试之外,有没有办法在项目中轻松找到所有这些破碎的“XML中的bean”,看看哪些失败然后冲洗并重复?

Spring Tool Suite或Eclipse的Spring插件可以检查spring配置文件是否正确(具有所有构造函数参数,并且不使用未知的setter)。

答案 2 :(得分:0)

我认为在使用Spring时应该使用SpringSource工具。您可以单独下载或作为Eclipse插件下载它:

http://www.springsource.com/developer/sts

http://dist.springsource.com/milestone/TOOLS/update/e3.6