0

我有一个许多类扩展的抽象类。一切都在src/groovy

在我的抽象类中,我希望注入一个子类将继承的服务,因此我不必将它们注入每一个。

abstract class Animal {

    def noiseService

    abstract Sound getSound()

}

class Dog extends Animal {

    Sound getSound() {
        noiseService.bark()
    }

}

在我的 resources.groovy 中:

animal(com.thepound.Animal) { bean ->
    noiseService = ref("noiseService")
}

这产生了一个错误,说它无法实例化该类,因为它是抽象的,所以我将其添加到定义中:

    bean.abstract = true

现在我不再收到错误,但是在我的子类中服务始终为空。我怎样才能让它工作?

4

2 回答 2

1

这就是我最终要做的。

我在这里按照 Burt Beckwith 的帖子http://burtbeckwith.com/blog/?p=1017创建了一个 ApplicationContextHolder 类。

然后

abstract class Animal {

    def noiseService = ApplicationContextHolder.getBean("noiseService")

    abstract Sound getSound()

}

现在这有效

class Dog extends Animal {

    Sound getSound() {
        noiseService.bark()
    }

}

我不必为DogorAnimal类在 resources.groovy 中添加任何内容

于 2013-10-18T15:02:52.207 回答
0

如果要实例化 Dog,只需执行以下操作:

noiseService(com.whatever.DogNoiseService) { bean ->
}

animal(com.thepound.Dog) { bean ->
    noiseService = ref("noiseService")
}
于 2013-10-17T20:39:18.980 回答