应该在Spring应用程序中对“一切”进行弹簧管理吗?

时间:2012-07-26 08:20:23

标签: java spring java-ee spring-mvc

我们正在开发一个新的应用程序,我们想使用Spring(大学项目!)

当您编写新的Spring应用程序时,是否应该为每个对象注入Spring?

class A {
    ...
    AHelper helper = new AHelper();
    helper.doSomething();
    ...
}

class AHelper {
    public void doSomething(){}
}
  1. 在这种情况下,应该使用setter将AHelper注入A中吗?如果A级依赖于5个助手,是否应该全部注入?这是最好的做法,如果是,我们从中获得了什么?

  2. 此外,如果类AHelper依赖于AHelperHelper并且依赖于AHelperHelperHelper,那么是否应该在XML中配置整个依赖关系链。我感觉不对劲!

3 个答案:

答案 0 :(得分:7)

在我看来,最好在项目开始时决定哪种对象是bean,哪些不是。它可以通过责任来区分,或者在我的情况下是相同的,放置它们。这个规则很容易向其他项目伙伴解释,它最大限度地减少了项目中间的修改和意外

所以,我通常做的事情:

  • 控制器服务存储库图层是Spring bean。所有这些通常都是相互连接的,我发现过于复杂的同时有一些豆子和一些常规物体。

  • 模型实体不是Spring bean。如果模型实体只是POJO,那么开发通常会更简单。此外,如果您在一次操作中加载数百个并且它们都是bean,则可能导致性能下降。

  • DTO VO ......好吧,我通常不需要它们,但如果我这样做,我将它们视为模型实体。

  • 实用程序类。它们有三种:

    • 静态方法类:显然它们不能是bean。它对你没有帮助。

    • 简单的对象,例如您自己的地图:只需将它们保留为常规对象。

    • 帮助 ,例如CsvFileConstructor:在我看来,这些只是服务,但有些人更喜欢将它们放在 util 包裹。无论如何,他们通常需要一些配置(在这种情况下:编码,基本路径,分隔符...),这样你就可以获得一些好处,如果你做豆子。

  • 例外枚举,......:当然,没有豆。

答案 1 :(得分:6)

我见过每个物体都被注入的项目,这是一场噩梦。

我会识别您可能构建的更大规模的组件,并在以下情况下将它们创建为Spring bean:

  1. 您可能想要配置它们
  2. 在他们身上使用Spring AoP(例如交易等)
  3. 客户可能希望使用这些组件重新构建您的应用程序
  4. 例如,在我当前的项目中,我们Spring启用新的更大规模的组件,我们可能希望启用/禁用发布,或者其他团队将使用,或者我们需要启用JMX(通过Spring AoP)

答案 2 :(得分:2)

不是一切。但在那种情况下,这可能是一个好主意,是的。您获得的是通过在其中注入模拟A来对AHelper进行单元测试的可能性。您可以获得许多其他内容(安全性,事务方面等),但这取决于上下文以及AAHelper对象的类型。

这同样适用于您的所有链条。请注意,XML不是配置Spring应用程序的首选方法。注释更易于使用,并允许使用最少的XML配置文件。