其他分享
首页 > 其他分享> > 为什么不在Spring工作中自动装配GWT servlet中的字段?

为什么不在Spring工作中自动装配GWT servlet中的字段?

作者:互联网

简单地在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);
}

标签:spring,autowired,gwt,aspectj,configurable
来源: https://codeday.me/bug/20190621/1251485.html