spring vaadin
最近,我对另一个Web框架Vaadin产生了兴趣,但它在服务器端完成了所有工作:开发人员无需学习HTML,CSS或JavaScript。 由于Vaadin提出了我的观点,即由于不断需要经验丰富的开发人员,因此Web应用程序价格昂贵,因此我进行了更深入的探讨:这可能是另一篇文章的主题。
无论如何,当我想在Vaadin中使用我最喜欢的依赖注入框架(即Spring)时,我感到有些失望。 经过Google的少许研究,我找到了Vaadin Wiki,更确切地说是有关Vaadin Spring Integration 的页面 。 它展示了将Spring与Vaadin集成的两种方法。
第一个使用Helper“模式”,这是一个具有静态方法的类,可以访问Spring应用程序上下文。 恕我直言,我们现在已经忘记了那些Helper类,因为它们完全破坏了DI的目的。 如果您需要显式调用Helper静态方法以获取Bean,那么控制反转在哪里?
第二种解决方案使用Spring专有注释@Autowired
以便使用DI。 由于IoC完全是关于解耦的,所以我强烈反对将代码耦合到Spring框架。
由于这两个选项对我来说似乎都不可行,所以让我向您介绍我所想象的一个:它非常简单,包括对Vaadin的AbstractApplicationServlet
进行子类化,然后使用它代替经典的ApplicationServlet
。
publicclassSpringVaadinServletextendsAbstractApplicationServlet{
/** Class serial version unique identifier. */
privatestaticfinallongserialVersionUID=1L;
privateClassclazz;
@Override
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
WebApplicationContextwac=WebApplicationContextUtils.getRequiredWebApplicationContext(
config.getServletContext());
Applicationapplication=(Application)wac.getBean("application",Application.class);
clazz=application.getClass();
}
/**
* Gets the application from the Spring context.
*
* @return The Spring bean named 'application'
*/
@Override
protectedApplicationgetNewApplication(HttpServletRequestrequest)
throwsServletException{
WebApplicationContextwac=WebApplicationContextUtils.getRequiredWebApplicationContext(
request.getSession().getServletContext());
return(Application)wac.getBean("application",Application.class);
}
/**
* @see com.vaadin.terminal.gwt.server.AbstractApplicationServlet#getApplicationClass()
*/
@Override
protectedClassgetApplicationClass()
throwsClassNotFoundException{
returnclazz;
}
}
此解决方案简洁明了(根据我的说法)。 唯一的缺点是它将servlet耦合到Spring。 但是,类本地化的耦合没有任何后果,并且完全可以接受。 Morevoer,这使您可以使用Spring自动装配机制,JSR 250自动装配或普通的XML显式装配。
spring vaadin