【问题标题】:Using dependency injection in a library在库中使用依赖注入
【发布时间】:2010-10-17 11:45:57
【问题描述】:
我正在编写一个可供现有应用程序使用的 java 库。我正在使用依赖注入,所以测试更容易,而且我熟悉 Spring,所以我打算在测试时使用它来管理依赖注入。然而,最终将使用该库的应用程序不是基于 Spring 的,它目前也不使用任何类型的 IoC/DI 容器。我的问题是,如果不使用 Spring 或 Guice,注入依赖项的最佳方法是什么?我应该考虑使用工厂方法来实例化和连接对象吗?依赖项都在库中,因此让应用程序实例化每个依赖项来创建主对象似乎并不合适。
【问题讨论】:
标签:
java
dependency-injection
【解决方案1】:
如果不使用 Spring 或 Guice,注入依赖项的最佳方法是什么?
如果您的库是用对 DI 友好的惯用语编写的。它应该很容易用作严格的 Java API。想想你过去的春天经历。有几个库与弹簧模型完美契合,但都是在春季之前编写的。我认为 new 后跟几个 setXX 然后调用 real work 方法并没有什么不好。请格外小心,因为除其他外,您的客户可能会忘记调用 spring 可靠调用的 thouse init 方法。
我应该考虑使用工厂方法来实例化和连接对象吗?依赖项都在库中,因此让应用程序实例化每个依赖项来创建主对象似乎并不合适。
让客户端应用程序来决定。您正在提供一个库。让 API 客户端连接它自己的对象。举个例子。稍后,可以使用相同的示例在客户端域上创建工厂方法。也许客户端应用程序有自己的配置方式,如果您的库提供的 API 足够灵活以利用这一点,那将是可取的。
或者也许你可以包含 guice。许可证是 Apache。就像整个 Java 本身一样。