Java Servlet 3.0的构造函数依赖注入?
自Servlet3.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 ... } 问
javax.Servlet.ServletContext#addServlet
以编程方式注册Servlet实例。这个类还有一个createServlet
方法,它分析一些注释并执行依赖项注入。如果我不需要注释处理,我想知道我是否需要这个方法。我希望有一个带有普通构造函数的servlet,通过依赖项注入来设置所需的依赖项
@Inject
public MyServlet(SomeDependency sd) { // Constructor
...
}
问题:
- 不使用
“手动”构造servlet实例是否可能?(createServlet
)newmyservlet()
- 是否可以使用JavaEE服务器的依赖项注入机制来执行构造函数注入?怎么做?还是需要像Guice这样的独立DI框架
顺便说一句,使用嵌入式Jetty服务器,您可以使用其自定义API添加预配置的servlet实例。Guice不需要Java EE服务器即可完成此操作
Guice在servlet上添加了一个层。这在JavaEE6之前很有用。今天,依赖注入是JavaEE的一部分,如果可能的话,我更愿意在没有额外框架的情况下使用它。Weld文档说:“我们可以通过将TextTranslator实例注入到bean的构造函数、方法或字段,或Java EE组件类(如servlet)的字段或方法中来获得TextTranslator实例。”似乎servlet不可能实现构造函数注入。请注意,早期版本的Weld相当。。。如果配置没有100%正确,则没有帮助。自那以后,情况可能有所改善。