是否有一个简单的框架允许独立程序中的依赖注入?

时间:2009-08-26 09:26:02

标签: java dependency-injection

我们基本上需要能够在启动时调整行为,方法是在我们的应用程序中提供由各个工厂生成的所需类(以避免“新”操作符的硬绑定)。

我知道这是由几个大型框架提供的,但我一直在寻找一个独立的Java应用程序很容易使用的东西而不是巨大的。

有什么建议吗?


编辑:根据我的经验,框架往往会成长为成熟的一部分(也是复杂的)。作为主要重构(技术债务)的一部分,我需要对遗留应用程序进行改造,因此简化对于使用的库来说至关重要。我不介意在我们的应用程序中进行一些编码,但它必须非常明显地发生了什么。 AOP倾向于将东西移开,这可能会使应用程序更难维护。


编辑:我们现在已经达到了实际需要做出决定的程度。该应用程序可能会存在数十年,因此我们需要通过一个框架做出可逆的决定,这个框架可以保留很长时间。我真的很喜欢Guice提供的静态类型检查,但并不是注释明确地绑定到Guice而不是像Spring那样是外部的。我也喜欢使用Guice而不是Spring时代码看起来更简洁。我们需要一些强大而有用的东西。我们目前不需要更多的DI。是否有一个用例明确表示要选择其中一个?


编辑2011-07-27:最终的决定是在代码中使用JSR-330 API,并在每个项目的基础上选择是否使用Spring,Guice或Weld。对于独立应用程序,Guice在JSR-330实现方面运行良好。

10 个答案:

答案 0 :(得分:7)

您始终可以使用Spring Framework 2.5。它是一个很大的,但如果你打算只使用DI,你可以使用spring-core和spring-beans模块,它们非常小(大约500KB和300KB)。

还有Google Guice 2.0附带一个只有基本内容(没有AOP)的软件包,它的容量为430KB。

答案 1 :(得分:5)

你看过Google Guice框架了吗?它非常轻量级且基于注释,避免了XML配置文件

还有Pico- and Nano-container(来自codehaus)虽然上次我看上去(不可否认几年前)文档很缺乏,但它还是非常轻量级的。

我必须说,我同意其他人的看法,我认为你的假设是春天是庞大而混乱的。它实际上是一个非常简单的IoC容器,值得推荐。

答案 2 :(得分:2)

我知道有一对你可能会觉得有用:

我发现Plexus在独立应用程序中非常有用,因为它具有用于CLI交互的可选实用程序组件。

答案 3 :(得分:1)

通过“巨大的”我会假设你指的是Spring,但这是不公平的,因为你可以选择你想要使用的Spring。如果您只需要IoC容器,只需使用相应的JAR文件和API的相应位,并忽略其余部分。

答案 4 :(得分:1)

到目前为止,大多数答案似乎都与要添加的jar文件的大小有关。

但是我认为更重要的问题是对项目的影响:为了使用框架,必须添加/更改多少代码行

即使是“大”弹簧框架实际上也很容易使用:

你基本上需要:

  • 描述工厂的xml文件。
  • 通过加载xml文件来初始化容器的一行代码

好消息是春天非侵入性。因此,您不必实现特定的接口,也不必在类中添加任何特定的注释或导入。

实际上,实际初始化Spring容器的唯一位置是放在您的应用程序中,该实际依赖于spring类。

答案 5 :(得分:1)

我强烈建议您查看Spring ME。虽然最初意味着在Java ME应用程序上使用Spring,但它也适用于独立应用程序。

没错,它并没有给你Spring(Full)提供的所有功能,但是Full Spring不仅仅是一个简单的依赖注入框架。

从好的方面来说:它基于Spring的配置文件的(兼容)子集,运行时的占用空间为0%。事实上,没有任何。 Spring ME将获取您的应用程序上下文,并将其转换为一个不依赖于您自己的类的类。

答案 6 :(得分:0)

Spring出了什么问题?

这些天它的包装非常好,所以你不需要拿整个套件和架子。

顺便说一句,我不喜欢基于注释的注入框架。这是因为注释绑定到类而不是实例,后者是DI的先决条件,imho。这意味着给定类的每个实例都会获得相同的注入对象,这似乎打败了这一点。

还要考虑DI甚至不需要框架,你的主要方法连接应用程序有什么问题?

答案 7 :(得分:0)

如果你想要一些最简单和最合适的东西,那么写一些你想做的事情的代码。据推测,这涉及部分基于固定逻辑的工厂连接,部分基于运行时设置。

这具有以下优点:可能的运行时配置集是已知的,并且因此是可记录的和可测试的。

它的缺点是,部署意外的逻辑更改本身需要花费额外的一秒左右的编译时间,并且(更重要的是)不能通过将其伪装成“仅仅是配置更改”而未经完全测试而潜入生产中

答案 8 :(得分:0)

大约一年前,我问自己一个非常类似的问题。所以我花了几个小时阅读Spring和Guice文档。在使用Spring大约一个小时后,我感觉我可以获得一个基本的Web应用程序,但不知道如何在独立的应用程序中使用它。在Guice文档上花了一个小时后,所有内容都被点击了,我可以看到我如何做我想做的事情。 现在推荐Guice?好吧不。你的团队已经知道什么?如果有人已经知道,那就说Spring知道并让他们传播知识。与Guice或Pico一样明智。

答案 9 :(得分:0)

如果你想要一些非常轻的东西,你可能想要看看fuse它可以相当扩展,所以可能是你正在寻找的东西。

欢呼声

<磷>氮

相关问题