有效地管理spring依赖关系

时间:2016-02-24 11:48:56

标签: java spring dependency-injection dependency-management

我们有一个庞大的Java项目,其中包含很多模块,导致很多依赖项。

假设B依赖于A(一个Spring bean)。

在过去的时间里,我们遇到了

的情况
  • A的“界面”已更改,B在运行时停止工作,
  • A的行为发生了变化,因此B继续工作但未达到预期效果。

如何避免或处理此类情况?我对流程,软件解决方案或指南感兴趣。

3 个答案:

答案 0 :(得分:1)

  

我们有一个庞大的Java项目,其中包含很多模块   的依赖关系。

数字1:

根据Spring Framework Best Practices

  

不要滥用依赖注入:

     

最后一点,Spring ApplicationContext可以创建Java对象   对你而言,并非所有Java对象都应该通过依赖创建   注射。例如,不应通过创建域对象   ApplicationContext中。 Spring是一个很好的框架,但是,就此而言   关于可读性和可管理性,基于XML   当定义了许多bean时,配置可能会成为一个问题。过度使用   依赖注入将使XML配置更多   复杂而臃肿。请记住,使用强大的IDE,例如Eclipse   和IntelliJ,Java代码更容易阅读,维护和管理   比XML文件!

所以只在偶然情况下使用依赖注入,否则会使你的项目混乱。

  

我对流程,软件解决方案或指南感兴趣。

如果您决定使用依赖注入,还有一些其他提示:

2号:

  

首选构造函数注入的setter注入:

     

Spring提供了三种类型的依赖注入:构造函数   注射,二次注射和方法注射。   构造函数注入可以确保无法构造bean   一个无效的状态,但是setter注入更灵活   可管理的,特别是当类具有多个属性和一些属性时   它们是可选的。

3号:

如果B1,B2,...,Bn依赖于A和A经常更改,请使用工厂类(AFactory)和依赖(Bi)s到AFactory bean而不是A bean。然后,对于创建A bean的每个更改,只有Afactory受到影响,而其他Bi bean不会被更改。

  

A的行为发生了变化,因此B继续工作但未达到预期效果。   你可以通过适当的集成测试来控制这些不便。

你也应该设计接口,以便每个方法都有一定的明确行为。然后你假设这些方法和行为并编写B.所以改变A的实现细节,不要影响B.的行为,如果你违反A的行为,B的行为就会改变,这是很自然的。实际上,开发人员有责任仔细设计接口并防止出现这些问题。

答案 1 :(得分:0)

听起来你需要为项目编写更好的单元测试用例。当组件A改变B的单元测试失败时,举例来说(A的测试会自然失败)。我建议编写好的单元测试用例,因为没有其他方法可以阻止变更请求。

答案 2 :(得分:0)

持续集成和测试套件应该是解决方案的一部分。当A改变所有依赖于A的东西时都会被重新测试。

接下来是确保公开的(即在其项目之外使用的)是公开的,因此当进行更改时,每个需要知道的人都知道。 看看你的团队和代码库的分离。 A和B应该由同一个团队处理吗?它们应该属于同一个代码库吗?