使用大量bean管理依赖注入应用程序的复杂性

时间:2009-06-12 11:18:33

标签: spring dependency-injection guice

我正在开发一个Spring应用程序,它有大量的bean - 数百个 - 而且使用和记录起来非常麻烦。

我对任何具有大量bean的DI启用应用程序的经验感兴趣,这有助于维护,文档和一般用途。

虽然应用程序是基于Spring的,带有几个上下文文件,但我仍然愿意听取有关任何DI容器和DI的建议。

4 个答案:

答案 0 :(得分:6)

您可以使用component scan and autowiring功能大幅减少Spring XML配置的数量。

示例:


<beans>
  <!-- Scans service package looking for @Service annotated beans -->
  <context:component-scan base-package="my.root.package.service"/>

</beans>

必须对您的服务类进行注释才能自动扫描:


package my.root.package.service;

@Service("fooService") public class FooServiceImpl implements FooService{

}

您还可以使用@Autowired批注告诉Spring如何注入bean依赖项:


package my.root.package.service;

@Service("barService")
public class BarServiceImpl implements BarService{
    //Foo service injected by Spring
    @Autowired
    private FooService fooService;

    //...
}

答案 1 :(得分:4)

我发现以下内容有用:

  1. 将Spring配置拆分为多个独立配置,并使用Spring的导入工具导入配置依赖关系(请参阅here,第3.2.2.1节)。这样你就可以根据需要组合或反汇编一组配置,它们都是自我依赖的(所有的依赖都是显式的和引用的)
  2. 使用支持Spring的IDE,并允许您通过点击bean(引用/名称,来源和源代码)来浏览配置。 Intellij在这方面非常有效(我认为版本7及更高版本)。我怀疑Eclipse会做类似的事情。
  3. 修改你正在注入的 。您可能希望将多个bean注入重构为一个复合或“meta”bean或更大的组件。或者您可能会发现曾经认为您需要注射的组件从未改变过,或者从未要求注射性(用于测试,实施策略等)。
  4. 我曾经使用过大量的Spring安装,有数百(数千?)个bean。拆分配置使生活更易于管理,简化了测试/创建独立流程等。但我认为Intellij附带的Intellij Spring集成产生了最大的不同。拥有一个支持Spring的IDE是一个重要的节省时间。

答案 2 :(得分:3)

正如@Wilson Freitas所说,使用自动装配。我每天使用一个系统,该系统有几千个春季托管bean,主要使用自动装配。但我认为“保留整体情况”的概念略显错位。随着系统的发展,您不能期望以与在较小系统上相同的方式执行此操作。使用@Autowiring会强制您使用比基于xml的spring更强的类型,这再次意味着您可以使用IDE的依赖关系跟踪功能来导航依赖关系。

我真的认为,当涉及弹簧配置时,认为你需要来理解太多的“完整”图片是不是最理想的。你应该专注于你的代码和它的依赖。通过很好地组织这些代码,很好地命名并管理耦合,可以实现可管理性和可维护性;所有适用的东西即使你不使用弹簧也适用。 Spring不应该有太大变化,并且在JSR-330的批准下,甚至可能看起来依赖注入将在运行时环境的“幕后”进一步蔓延。

答案 3 :(得分:1)

我们的策略是:

  • 命名约定,例如:fooService,fooDao,fooController;
  • 遵循这些约定的属性设置者;
  • 按名称自动装配(autowire =“byName”);我们在按类型自动装配时遇到了很多问题,特别是在控制器层上