是否可以在没有容器的情况下使用Spring Framework DI?

时间:2015-12-02 16:32:30

标签: java spring dependency-injection

我想创建一个java API来连接Restful API。 为了处理依赖关系,我想使用Spring。

但是,我在互联网上看到的所有例子都谈到了DI容器,整个系统就像服务一样运行。

我需要的是: 为用户提供一些类可以连接到这样的Restful API,但这些类的内部依赖关系由Spring解决。不用说,这个框架不会启动任何应用程序服务器。它将提供一些有用的类和接口来联系RestAPI。

这可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

情况

假设我已经编写了一个提供名为Car的类的API。用户可以在他们的项目中使用此Car类。但是Car类依赖于另外两个类:Wheel和Engine。我想要的是自动注入的最后两个类,而无需用户实例化它。

对这种情况的简短回答是:不。 原因是有人必须开始春天。 你有一些选择。

解决方案1 ​​

您可以创建某种为您启动Spring的初始化类。 API用户需要这样做:

  1. 调用初始化内容。可能就像myAPI.initialize();一样简单。
  2. 然后使用你的东西。
  3. 这是一个巨大的(imho)缺点,你的API中的每个类都需要检查是否发生了初始化。

    解决方案2

    通过工厂公开课程。在这种情况下,API用户会执行以下操作:MyFactory.createCar(...parameters...);

    使用这种技术,Spring初始化将对用户隐藏,因为你可以在MyFactory类的静态初始化块中加载Spring。

    解决方案3

    而不是工厂模式, 使用构建器模式来实例化您的类。 这实际上是工厂解决方案的变体, 除了每个Builder都会调用一些隐藏(也许是包访问)类的静态初始化方法,该类启动Spring一次。

    选项其他

    如果你只想要DI, 春天可能不适合你(它可能是矫枉过正的)。 Google guice是一个"只是" DI工具可能很合适。 即使有guice, 有人还需要启动它, 所以解决方案1-3将适用。