0

我在坚持上课时遇到问题。我有一个名为 Scraper 的类,它使用一个名为 Paginator 的接口。Paginator 接口有几种实现,它们将在运行时实例化。所以结构看起来像这样:

class Scraper {

    //some code

    Paginator paginator

    //more code

    def Scraper(Paginator paginator){
        this.paginator = paginator
    }
}

然后是 paginator 接口的具体实现,比如说 paginatorA 和 paginatorB。所以现在我正在尝试执行以下操作:

PaginatorA p = new PaginatorA()
Scraper s = new Scaper(p)

s.save(flush:true)

...它得到的是:

Error Error executing script TestApp:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name     'mongoDatastore': Cannot resolve reference to bean 'mongoMappingContext' while setting bean property 'mappingContext';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoMappingContext': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException (Use --stacktrace to see the full trace)

谁能告诉我该怎么做?我猜它与 Mapper 有关,因为它不知道要使用哪个具体的 Paginator 或如何持久化它?如果是这种情况,那么我该如何告诉框架该做什么?我花了几个小时试图想出一个解决方案,但我真的很沮丧,所以任何帮助都会非常感激。

哦,顺便说一句,我也尝试针对具体实现(PaginatorA)进行实现......这非常好,因为我假设它与分页器接口有关。

感谢您的任何回复...

4

1 回答 1

2

这个错误很糟糕,你可能应该为此提出一个 JIRA 问题,但从根本上我可以看到代码有 2 个问题:

  1. 你的持久类必须有一个公共的无参数构造函数,就像任何 JavaBean 一样,通过添加一个接受你的接口的构造函数,你不再提供一个

  2. 您的 Scraper 类需要将“Paginator”标记为瞬态,以告诉持久性引擎不要尝试保留“paginator”属性。由于这是一个自定义接口,它不会知道如何持久化它。

于 2012-11-29T14:13:54.457 回答