我有wicket aspectj应用程序,它使用hibernate带注释的类并使用DAO服务层。
我开发了一个不在applicationcontext中运行的updatetask。因此,我创建了一个main方法,并将上下文作为全局变量加载。
public static void main(String[] args) throws Exception
{
context = new ClassPathXmlApplicationContext(LOCATIONS);
XS2RAWebApp webApp = new XS2RAWebApp() {
@Override
public void init() {
getComponentInstantiationListeners().add(new SpringComponentInjector(this, context,true));
}
};
ThreadContext.setApplication(webApp);
ResponseUpdateTask updatetask = new ResponseUpdateTask();
updatetask.run();
}
如您所见,SpringComponentInjector提供了一个springcomponent注入器。
在这个更新任务中,我想用hibernate保存一些数据。
我有Hibernate实体,在这个实体里面我有一个对我的服务DAO的引用。
@MappedSuperclass()
public abstract class Entiteit {
private static final Logger log = LoggerFactory.getLogger(Entiteit.class);
@SpringBean()
@Transient
private transient DataAccessHelper daoHelper;
...
public DataAccessHelper getDaoHelper() {
if (daoHelper== null) {
Injector.get().inject(daoHelper);
}
return daoHelper;
}
}
我尝试过的事情
我知道这似乎不是我所尝试的,但我现在真的没有选择:S
答案 0 :(得分:2)
您需要注册一个包含ServetContext和WicketFilter链接的应用程序。这可以通过编程方式完成:
public static void main(String[] args) throws Exception
{
context = new ClassPathXmlApplicationContext(LOCATIONS);
XS2RAWebApp webApp = new XS2RAWebApp() {
@Override
public void init() {
getComponentInstantiationListeners().add(new SpringComponentInjector(this, context,true));
}
};
ThreadContext.setApplication(webApp);
webApp.setServletContext(new MockServletContext());
webApp.setWicketFilter(new WicketFilter(webApp));
webApp.initApplication();
ResponseUpdateTask updatetask = new ResponseUpdateTask();
updatetask.run();
}