Java的轻量级IOC容器?

30

我来自.NET,习惯使用Ninject,这是一个小巧简单的IoC容器。是否有任何简单轻量级的Java替代方案?

越简单越好!


2
Ninject最初是基于Guice的,如果我没记错的话。 - ColinD
4个回答

30

Pico容器Google Guice。在此处比较它们。

顺便说一句,很少有人会称Spring为“轻量级”,但是只使用基本功能就可以将其作为轻量级框架。因此,它也包含在上述比较中。


如果简单性是首要考虑因素,我强烈推荐使用Pico。它之所以被称为“Pico”,是有原因的! - erickson
在基本使用方面,我会称Spring为轻量级。它对你使用的类没有任何限制或要求,除了像bean一样。如果需要,Spring提供了所有额外的功能,但不会强制施加给你。 - matt b
@matt b - 是的,这就是我说它可以这样使用的原因。事实上,它几乎从不被使用,因为它提供了许多额外功能,你不想重新发明轮子。但主流观点认为它很“重”(由于有太多额外功能)。 - Bozho
我只是想在这种情况下成为支持者中的一员,发表我的声音 :) - matt b
1
Spring 在某种意义上也很沉重,如果你用它来动态创建容器,那么它的速度比 Pico 慢几个数量级。在我的 Mac 上进行多线程 JUnit 测试时,我可以创建一个 Pico 容器,向其中添加 4 个组件,并在 5 秒内解析这些组件约 1,000,000 次(即从头开始创建 1,000,000 个容器等)。即使使用 Spring 的纯 Java API(XML 太慢了),它仍然只能在 5 秒内完成约 17,000 次。此外,Spring 在解析和创建原型方面也要慢得多。Spring 是一把臃肿的瑞士军刀;Pico 是一把单一而精美的 DI 刀片。 - rees
你可以使用 http://square.github.io/dagger,它更轻量化,因此可以在移动设备上运行。Dagger可以在编译时检测出许多问题。 - Cristian Rinaldi

9

CDI是什么?(与Guice几乎相同,但是它是一个JSR而不是专有的)


哇,这怎么被踩了? - Jonathan S. Fisher
不知道为什么有人给你投了负票。这不公平,所以我给你投了正票。 :) - MarkWalls
一个链接可能会有帮助。不清楚CDI是什么意思。虽然不确定任何JEE是否符合轻量级的定义。它在容器外面不起作用,对吧? - Saifuddin Merchant
是的。CDI可以完全独立于Java EE运行。但是,现在与Spring等替代方案相比,Java EE更加轻量级。我们基于TomEE的一些应用程序的单个JAR构建大小为80MB,仅需要64MB的RAM即可运行,并且冷启动时间为10秒。Wildfly Swarm将提供更小的文件大小,但启动速度较慢,并且具有更大的内存运行时要求(约为TomEE的2倍)。 - Jonathan S. Fisher

7

Guice?

的翻译是:

{{链接1:Guice}}?


6

Silk DI 是一个 120K 的 jar 包,不需要任何额外的运行时依赖。因此它比例如 guice 或 spring 更加轻量级,而且比pico-container还要小,但具有更强大的功能集。它也没有像guice的 multibind 或 pico-container 的gem一样将功能拆分成单独的附加 jar 包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接