Java Servlet 3.0的构造函数依赖注入?

Java Servlet 3.0的构造函数依赖注入?,java,servlets,dependency-injection,Java,Servlets,Dependency Injection,自Servlet3.0以来,可以使用javax.Servlet.ServletContext#addServlet以编程方式注册Servlet实例。这个类还有一个createServlet方法,它分析一些注释并执行依赖项注入。如果我不需要注释处理,我想知道我是否需要这个方法。我希望有一个带有普通构造函数的servlet,通过依赖项注入来设置所需的依赖项 @Inject public MyServlet(SomeDependency sd) { // Constructor ... } 问

自Servlet3.0以来,可以使用
javax.Servlet.ServletContext#addServlet
以编程方式注册Servlet实例。这个类还有一个
createServlet
方法,它分析一些注释并执行依赖项注入。如果我不需要注释处理,我想知道我是否需要这个方法。我希望有一个带有普通构造函数的servlet,通过依赖项注入来设置所需的依赖项

@Inject
public MyServlet(SomeDependency sd) {  // Constructor
  ...
}
问题:

  • 不使用
    createServlet
    “手动”构造servlet实例是否可能?(
    newmyservlet()
  • 是否可以使用JavaEE服务器的依赖项注入机制来执行构造函数注入?怎么做?还是需要像Guice这样的独立DI框架

最近的JavaEE6标准现在支持servlet的依赖注入,相关部分称为JSR-299或CDI。如果您不想使用完整的JavaEE6应用服务器,比如GlassfishV3,那么JSR-299参考实现也可以部署到像Tomcat或Jetty这样的servlet容器中


顺便说一句,使用嵌入式Jetty服务器,您可以使用其自定义API添加预配置的servlet实例。

Guice不需要Java EE服务器即可完成此操作


Guice在servlet上添加了一个层。这在JavaEE6之前很有用。今天,依赖注入是JavaEE的一部分,如果可能的话,我更愿意在没有额外框架的情况下使用它。Weld文档说:“我们可以通过将TextTranslator实例注入到bean的构造函数、方法或字段,或Java EE组件类(如servlet)的字段或方法中来获得TextTranslator实例。”似乎servlet不可能实现构造函数注入。请注意,早期版本的Weld相当。。。如果配置没有100%正确,则没有帮助。自那以后,情况可能有所改善。