简单地在GWT servlet中将字段标记为@Autowired不能按预期工作.代码将编译并且Web应用程序将启动 – 这意味着Spring成功地能够自动装载该字段,但是当servlet实际上被客户端代码命中时,它将产生NullPointerException – 就像有一个不同的,未初始化的副本servlet被击中了.
我已经在Web上找到了几种方法来实现这一点,一种方法是使用一个基本的servlet类来执行一些Spring逻辑,但这样做意味着每个GWT servlet都必须扩展这个基类.另一种方法是使用AspectJ和@Configurable Spring注释.这里涉及的配置非常少,它只是神奇地工作.
我的问题是为什么不只是按照预期的方式自动操作该领域? GWT做什么导致这种情况破裂.
解决方法:
The code will compile and the web application will start up – which
means Spring was successfully able to autowire the field
不必要. Web容器可以在没有Spring帮助的情况下实例化servlet.你可能会遇到的问题:
but when the servlet is actually hit by client-side code, it will
yield a NullPointerException – like there’s a different, uninitialized
copy of the servlet being hit.
尝试重写Servlet的init():
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
WebApplicationContextUtils.getWebApplicationContext(config.getServletContext())
.getAutowireCapableBeanFactory().autowireBean(this);
}