Java zk+;Springbean,@resource的空指针
我已经将我的应用程序从zk 5.0升级到zk 6.5,重新运行应用程序后SpringBean为空,请帮助,下面是代码: web.xmlJava zk+;Springbean,@resource的空指针,java,spring,zk,Java,Spring,Zk,我已经将我的应用程序从zk 5.0升级到zk 6.5,重新运行应用程序后SpringBean为空,请帮助,下面是代码: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<description>Application</description>
<display-name>Application</display-name>
<!-- Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>
<!-- Spring configuration -->
<!-- Initialize spring context -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- ZK -->
<listener>
<description>ZK listener for cleanup when a session is destroyed</description>
<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
</listener>
我发现如果我使用
CategoryService CategoryService=(CategoryService)SpringUtil.getBean(“CategoryService”);
而不是@Resource CategoryService CategoryService
但是我想保留我的旧代码,有人能告诉我旧代码出了什么问题吗,它在ZK5.0中工作?zk升级后,Springbean似乎被忽略了。
您需要使用以下内容对类进行注释:
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
然后:
@WireVariable
CategoryService categoryService;
嗯,还有一个肮脏的把戏(这是一个基本VM,但也适用于控制器):
然后您仍然可以使用@Inject
旁注:请仅将此作为一个快速解决方案,并尝试找出自动布线在空闲时间不工作的真正问题。
我这样说是因为普通的
@wirelaviable
是连接SpringBean的唯一最佳方式
查找解决方案:尝试将
@组件
更改为@服务
或@存储库
,查看您是否仍然获得空指针,或删除指定给它的名称。我知道文档中清楚地提到了
@Component
,但也有可能出现bug。粘贴StackTrace您的zk spring版本是什么?我没有使用zk spring。我导入了spring.jar版本2.5.6I,并将我的SearchController更新为以下版本,仍然是空指针异常@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)公共类SearchController扩展AbstractController@WireVariable(“categoryService”)categoryService categoryService;只有将其更新为CategoryService CategoryService=(CategoryService)SpringUtil.getBean(“CategoryService”);有人能帮忙吗?您错过了链接中描述的web.xml中的第二个侦听器。抱歉,我忘了说,我已将这两个侦听器都添加到web.xml中。但还是有一个例外。
package com.dc.myapplication.controller;
import javax.annotation.Resource;
public class SearchController extends AbstractController implements PaginationListener, RfiCategoryState {
private static final String STATE = "state";
@Resource CategoryService categoryService;
@Override
protected void initialise() {
populateCategories();
}
private void populateCategories() {
for (RfiCategory category : categoryService.getCategories()) {
categories.appendChild(rfiCategoryRenderer.renderRadioSelector(category, this));
}
}
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
@WireVariable
CategoryService categoryService;
public AbstractVM() {
this.autowire(this);
}
protected final void autowire(Object object) {
this.getApplicationContext().getAutowireCapableBeanFactory()
.autowireBean(object);
this.getApplicationContext().getAutowireCapableBeanFactory()
.initializeBean(object, null);
}