6

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

我对您使用具有大量 bean 的支持 DI 的应用程序的任何经验感兴趣,这将有助于可维护性、文档和一般使用。

尽管该应用程序是基于 Spring 的,带有几个上下文文件,但我愿意听取有关任何 DI 容器以及一般 DI 的建议。

4

4 回答 4

6

您可以使用组件扫描和自动装配功能来显着减少 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;

    //...
}

于 2009-06-13T14:55:20.603 回答
4

我发现以下内容很有用:

  1. 将您的 Spring 配置拆分为多个独立配置,并使用 Spring 的导入工具导入配置依赖项(参见此处,第 3.2.2.1 节)。这样你就有了一组配置,你可以根据需要组合或拆卸它们,它们都是自依赖的(所有的依赖都是显式的和引用的)
  2. 使用支持 Spring 的 IDE,并允许您通过点击 bean(引用/名称、往返源代码)来浏览配置。Intellij在这方面工作得很好(我认为是版本 7 及更高版本)。我怀疑 Eclipse 会做类似的事情。
  3. 修改你在哪里注入的内容。您可能希望将多个 bean 注入重构为一个复合或“元”bean,或更大的组件。或者您可能会发现您曾经认为需要注入的组件从未更改过,或者从未要求可注入性(用于测试、实施为策略等)

我曾经使用过一个巨大的 Spring 安装,有数百个(数千个?)bean。拆分配置使生活更易于管理,并简化了测试/创建独立流程等。但我认为 Intellij 附带的 Intellij Spring 集成带来了最大的不同。拥有 Spring-aware IDE 可以节省大量时间。

于 2009-06-12T11:29:20.453 回答
3

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

我真的认为,当涉及到 spring 配置时,认为您需要了解太多的“完整”情况是不理想的。您应该专注于您的代码及其依赖项。可管理性和可维护性是通过良好地组织代码、良好地命名和管理耦合来实现的;即使您不使用弹簧,所有适用的东西。Spring 应该不会有太大变化,并且随着 JSR-330 的批准,依赖注入甚至可能看起来会在运行时环境的“底层”进一步蔓延。

于 2009-06-14T05:44:50.530 回答
1

我们的策略是:

  • 命名约定,例如:fooService、fooDao、fooController;
  • 遵循这些约定的属性设置器;
  • 按名称自动装配 (autowire="byName"); 我们在按类型自动装配时遇到了很多问题,尤其是在控制器层
于 2009-08-05T09:48:44.610 回答