【问题标题】:AspectJ and Wicket throws nullpointer for InjectorAspectJ 和 Wicket 为 Injector 抛出空指针
【发布时间】:2012-10-25 14:00:19
【问题描述】:

我有 wicket aspectj 应用程序,它使用 hibernate 注释类并使用 DAO 服务层。

我开发了一个不在应用程序上下文中运行的更新任务。因此,我创建了一个 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 实体,在这个实体中我有一个对我的服务 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;
  }
}

我尝试过的事情

  1. 只需使用 Mockapplication 并添加新的新 SpringComponentInjector(this, context,true),这会导致异常告诉我对应用程序进行初始化 (Allication.init())
    1. 试错法解决方案

我知道我尝试过的似乎并不多,但我现在真的没有选择:S

【问题讨论】:

  • 能否请您显示错误日志输出中的空指针异常?

标签: hibernate wicket aspectj


【解决方案1】:

您需要注册一个应用程序,该应用程序具有指向 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();
}

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多