在GWT servlet中,仅仅将一个字段标记为@Autowired
并不能按预期工作。代码会被编译,web应用程序会启动 - 这意味着Spring成功地完成了字段的自动装配,但当servlet被客户端代码实际调用时,会出现NullPointerException
- 就像有一个不同的、未初始化的servlet被调用了。
我在网上找到了几种解决方法,其中一种是使用一个基本servlet类来进行一些Spring逻辑,但这意味着每个GWT servlet都必须扩展这个基类。另一种方法是使用AspectJ和@Configurable
Spring注解。这里几乎没有涉及到配置,它就神奇地工作了。
我的问题是为什么只是简单地自动装配字段不能按预期工作?GWT做了什么导致这个问题出现。
不一定。Web容器可以在没有Spring的帮助下实例化一个servlet。这可能是你遇到的情况:
试试重写Servlet的init()方法:
@Override public void init(ServletConfig config) throws ServletException { super.init(config); WebApplicationContextUtils.getWebApplicationContext(config.getServletContext()) .getAutowireCapableBeanFactory().autowireBean(this); }