使用Servlet 3.0构造函数依赖注入?

时间:2010-01-02 17:06:43

标签: java servlets dependency-injection

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

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

问题:

  • 是否可以在没有createServlet的情况下“手动”构建servlet实例? (new MyServlet()
  • 是否可以使用Java EE服务器的依赖注入机制来执行构造函数注入?怎么做?或者是像Guice所需的单独的DI框架?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

Guice在不需要Java EE服务器的情况下开箱即用。

http://code.google.com/p/google-guice/wiki/ServletModule