【问题标题】:How to use dependency injection in servlet?如何在 servlet 中使用依赖注入?
【发布时间】:2012-05-11 09:59:05
【问题描述】:

如何将对象注入到 servlet?

我的意思是,我不能使用构造函数 DI,因为 servlet 是由 servlets 容器实例化的。
而且我也没有看到为 servlet 实现基于 setter 的 DI 的好方法。

我应该使用 servlet 监听器吗?有什么最佳实践吗?

附:我既没有 Spring 也没有 Guice 也没有任何其他 DI 框架,我对手动依赖注入很感兴趣。

【问题讨论】:

标签: java servlets dependency-injection


【解决方案1】:

这在 Servlet 3.0 下是可能的。您注册一个ServletContextListener,它在应用程序启动之前以编程方式使用ServletContext 的addServlet(String, Servlet) 方法注册Servlet 实例。由于您自己实例化了 Servlet 实例,因此您可以为它们提供适当的构造函数并注入依赖项。

我不久前创建了an example,它说明了基本技术。

【讨论】:

    【解决方案2】:

    您可以使用由某些 IOC 容器(Spring、Guice)创建/管理的服务

    您可以创建一个 ContextAware 实现,并在需要时从 Servlet 中提取 bean

    【讨论】:

    【解决方案3】:

    您可以使用 JNDI、Java 命名和目录接口和 @Resource 来注入它。

    【讨论】:

    • 如果我错了,请纠正我,但 JNDI 不是服务定位器的实现,而不是依赖注入,因此受到Service Locator as an antipattern 的通常批评?
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多