获取某个接口扩展的服务
Get services extended from a certain interface
可以从grails中的某个接口获取所有扩展的服务
所以我可以在一项服务中收集它们
是的,我想你可以通过自动装配到 List
类型来做到这一点。假设您在 grails-app/services
中有一个接口 BaseService
的三个实现:
grails-app/services/exampleapp/BaseService.groovy
package exampleapp
interface BaseService {
}
grails-app/services/exampleapp/OneImplService.groovy
package exampleapp
class OneImplService implements BaseService {
}
grails-app/services/exampleapp/TwoImplService.groovy
package exampleapp
class TwoImplService implements BaseService {
}
现在,您可以注入 BaseSerive
的所有实现,如下所示:
grails-app/services/exampleapp/TestService.groovy
package exampleapp
import org.springframework.beans.factory.annotation.Autowired
class TestService {
@Autowired
List<BaseService> baseServiceList
void doSomething() {
assert baseServiceList.size() == 2
}
}
请注意上面的示例是使用 Grails 5 Web 应用程序测试的。但是,如果这在以前的 Grails 版本中不起作用,我会感到惊讶。
可以从grails中的某个接口获取所有扩展的服务
所以我可以在一项服务中收集它们
是的,我想你可以通过自动装配到 List
类型来做到这一点。假设您在 grails-app/services
中有一个接口 BaseService
的三个实现:
grails-app/services/exampleapp/BaseService.groovy
package exampleapp
interface BaseService {
}
grails-app/services/exampleapp/OneImplService.groovy
package exampleapp
class OneImplService implements BaseService {
}
grails-app/services/exampleapp/TwoImplService.groovy
package exampleapp
class TwoImplService implements BaseService {
}
现在,您可以注入 BaseSerive
的所有实现,如下所示:
grails-app/services/exampleapp/TestService.groovy
package exampleapp
import org.springframework.beans.factory.annotation.Autowired
class TestService {
@Autowired
List<BaseService> baseServiceList
void doSomething() {
assert baseServiceList.size() == 2
}
}
请注意上面的示例是使用 Grails 5 Web 应用程序测试的。但是,如果这在以前的 Grails 版本中不起作用,我会感到惊讶。