无需任何框架即可将依赖项注入 Servlet 的最佳/最干净方法

发布于 2024-11-05 13:57:43 字数 129 浏览 0 评论 0原文

当您不想使用任何类型的 DI 框架时,将依赖项注入 Servlet 的最佳方法是什么?我应该将它们放入 ServletContextListener 中的 ServletContext 中吗?

What is the best way to inject dependencies into Servlets when you don't want to use any sort of DI frameworks? Shall I put them into the ServletContext in a ServletContextListener?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女皇必胜 2024-11-12 13:57:43

是的。您可以在 ServletContextListener 中初始化它们(如果您需要预先初始化它们),然后将它们放入 ServletContext 中以供所有 servlet 访问。

最好按类名存储对象,以便检索是类型安全的。

Foo foo = servletContext.getAttribute(Foo.class.getName());

Yes. You could initialize them in a ServletContextListener (if you need them pre-initialized) and then put them into the ServletContext for all your servlets to access.

It's probably best to store the objects by their class name so retrieval is type-safe.

Foo foo = servletContext.getAttribute(Foo.class.getName());
落花浅忆 2024-11-12 13:57:43

要在 servlet 中注入某些内容,您需要获取另一个类中的 servlet 实例。但您不能这样做,因为 getServlet(name) 方法已被弃用(并且不起作用)。

因此每个 servlet 都必须在上下文中手动注册自己。在每个 servlet 的 init() 方法中,您可以将其自身添加到 servlet 上下文中的集合中:

((List<HttpServlet>) servletContext.getAttribute("servlets")).add(this);

然后,在 ServletContextListener 中,您可以循环所有已注册的 servlet 并调用一些 setter ,或用户反射,从外部设置依赖关系。

但是......这似乎太复杂了,所以你可能会坚持使用 new 运算符。

To inject something in servlets, you need to get the servlet instances in another class. And you can't do that, because the getServlet(name) method is deprecated (and not working).

So each servlet will have to register itself manually in the context. In the init() method of each servlet you can add itself to a collection in the servlet context:

((List<HttpServlet>) servletContext.getAttribute("servlets")).add(this);

Then, in a ServletContextListener you can loop all registered servlets and invoke some setters, or user reflection, to externally set the dependencies.

But..that seems too complicates, so you might stick with the new operator here and there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文