在将依赖注入作为一种风格变得非常熟悉之后,我发现自己编写了一个类似这样的 HTTP servlet:
public class FooServlet extends HttpServlet {
private Dependency dependency;
public void setDependency(Dependency dependency) {
this.dependency = dependency;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
...
Result r = dependency.doSomething(...);
...
}
这非常容易进行单元测试,而且我很想保留这个模型——但是现在我将它部署在 Tomcat 中,我意识到我不知道我可以从哪里调用 setDependency()。
想到一些模糊的可能性:
- 在 init() 中获取 servlet 参数。这些只是字符串,所以我必须做一些反射来创建。这不是真正的 DI。刚刚配置了依赖创建。
- JNDI 的一些东西
- 不知何故,从嵌入 Tomcat 的 Java 程序中,让 Tomcat 给我一个 Servlet 对象的引用,让我可以调用它的 setter。
- 使用弹簧。如果我使用 Spring,我会寻找保持它轻量级的方法。这个应用程序不够复杂,不足以保证 Spring MVC。