问题 如何在servlet中使用依赖注入?


如何将对象注入servlet?

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

我应该使用servlet监听器吗?有没有最好的做法?

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


7946
2018-05-11 09:59


起源

看看这个问题。也许它会有所帮助: stackoverflow.com/q/1992132/891391 - yatul


答案:


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

我创建 一个例子 前一段时间说明了基本技术。


16
2018-05-11 10:08



+1我不知道 addServlet - ewernli
@ewernli:IMO,Sun / Oracle没有给它应有的宣传效果。 - Sean Reilly
谢谢你的朋友,非常乐于助人 - 7zark7


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

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


0
2018-05-11 10:06



使用Spring这种方式不是依赖注入,而是有效地使用服务定位器, 这被认为是反模式 - Jules


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


0
2018-05-11 10:12



如果我错了,请纠正我,但JNDI不是服务定位器的实现,而不是依赖注入,因此受到通常的批评 服务定位器作为反模式? - Jules