在带有大量豆类的依赖性应用程序中管理复杂性
-
13-09-2019 - |
题
我正在研究一个弹簧应用程序,该应用程序拥有大量豆子(数百个豆子),而且使用和文档非常繁琐。
我对您对拥有大量豆类的DI-abled应用程序的经验感兴趣,这将有助于可维护性,文档和一般用法。
尽管该应用程序是基于弹簧的上下文文件的,但我愿意聆听有关任何DI容器和关于DI的建议。
解决方案
我发现以下内容是有用的:
- 将您的弹簧配置分为多个独立配置,并使用Spring的导入功能来导入配置依赖项(请参阅 这里, ,第3.2.2.1节)。这样,您就可以根据需要组合或拆卸一组配置,并且它们都是自我依赖的(所有依赖项都会明确并引用)
- 使用弹簧感知的IDE,并允许您通过bean上的Point-n-lick(参考/名称,to-to-infrom源代码)导航。 Intellij 在此(我认为版本7及以后)非常有效。我怀疑Eclipse会做类似的事情。
- 修订 什么 您正在注射 在哪里. 。您可能需要将多个豆子重构为一个复合材料或“元”豆或较大的组件。或者,您可能会发现您曾经认为需要注入的组件从未改变过,或者从不要求注射性(用于测试,以策略等实施等)
我曾经使用一个巨大的春季装置,其中有数百万个豆子。将配置分开使生活变得更加易于管理,并简化了测试/创建独立的过程等。但是我认为Intellij随附的Intellij Spring集成造成了最大的不同。拥有春季的IDE是一个主要的时间节省。
其他提示
您可以使用 组件扫描和自动扫描 大大减少弹簧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”)公共类FooserviceImpl实施Fooservice {
}
您还可以使用@Autow的注释来告诉Spring如何注入bean依赖项:
package my.root.package.service;
@Service("barService")
public class BarServiceImpl implements BarService{
//Foo service injected by Spring
@Autowired
private FooService fooService;
//...
}
正如@Wilson Freitas所说,使用自动释放。我每天都使用一个使用大部分自动化的系统,该系统拥有几千个春季托管豆。但是我认为“保留整体图片”的概念有些放错了位置。随着系统的增长,您不能指望以与在较小系统上相同的方式这样做。使用@Autowiring强制,您可以使用比基于XML的弹簧更强大的键入,这再次意味着您可以使用IDE的依赖关系跟踪功能在依赖项中导航。
我真的认为认为您 需要 在春季配置方面,要了解太多的“完整”图片。您应该专注于您的代码及其依赖性。通过很好地组织此代码,很好地命名事物并管理您的耦合,可以实现可管理性和可维护性;即使您不使用春季,所有适用的东西也适用。春季应该不会改变太大,并且经JSR-330的批准,似乎依赖注入似乎会进一步爬行,在运行时环境的罩子下。
我们的策略是:
- 命名约定, ,例如:Fooservice,Foodao,Foocontroller;
- 遵循这些惯例的物业设定者;
- 用名称自动 (autowire =“ byname”);我们在按类型上进行自动释放有许多问题,尤其是在控制器层上