我想使模板引擎在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(这是可以理解的,因为它将您锁定在一个类层次结构中)。