gpt4 book ai didi

java - 将依赖项注入(inject)静态字段

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:18:31 25 4
gpt4 key购买 nike

我想让模板引擎在 servlet 中可用。具体的模板引擎实现应该在 TemplateEngine 接口(interface)后面是可变的。使用通常的依赖注入(inject),它可能看起来像这样:

public abstract class BaseServlet extends HttpServlet {

private TemplateEngine templateEngine;

public void setTemplateEngine(TemplateEngine te) {
templateEngine = te;
}

protected void render(Result result, HttpServletResponse response) {
templateEngine.render(result, resonse);
}

}

这种方式的缺点是每个要使用render方法的Servlet都必须扩展BaseServlet。因此我想要一个静态导入的渲染方法。

public class TemplateEngineWrapper {

@Inject
static TemplateEngine templateEngine;

public static void render(Result result, HttpServletResponse response) {
templateEngine.render(result, resonse);
}

}

在 Servlet 中我会这样使用它:

import static TemplateEngineWrapper.render;

...

public void doGet(...) {
render(new Result(200, "Everything is fine."), response);
}

...

这种方法有问题吗?如果是这样:你会建议什么?

最佳答案

这种方法的问题在于它将您的 Servlet 紧密耦合到渲染的单个实现(它是变相的单例)。避免这种紧耦合是依赖注入(inject)的一个主要好处。最好使用以下方法将渲染器注入(inject)到每个 servlet 中:

  @Inject
private TemplateEngine templateEngine;

如果你想避免必须从 BaseServlet 继承(可以理解,因为它将你锁定在一个类层次结构中)。

关于java - 将依赖项注入(inject)静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com