我想使模板引擎在servlet中可用。具体的模板引擎实现应在TemplateEngine接口后可以更改。使用通常的依赖注入,它看起来可能像这样:

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。因此,我想有一个静态导入的render方法。
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与渲染的单个实现紧密耦合(这是一个单身汉)。避免这种紧密耦合是依赖注入的主要好处。最好使用以下方法将渲染器注入每个servlet中:

  @Inject
  private TemplateEngine templateEngine;

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

08-26 17:15
查看更多