【问题标题】:how to check if a service implements an interface in grails如何检查服务是否在grails中实现接口
【发布时间】:2014-11-15 11:35:23
【问题描述】:

我有一个接口“TestInterface”和实现“TestInterface”的grails服务“TestService”。但是当我测试我是否有一个实现这样接口的服务时:

application.serviceClasses?.each { serviceClazz ->

            if(serviceClazz instanceof TestInterface) {
                println "service name => "+ serviceClazz.name;
            }
}

结果是我没有得到任何错误或我的期望(service name => TestService

我也尝试在 if 条件下将 serviceClazz 更改为 serviceClazz.class,serviceClazz.metaClass 但仍然无法正常工作。

谢谢,

【问题讨论】:

    标签: spring grails grails-2.3


    【解决方案1】:

    怎么样:

    if (TestInterface.class.isAssignableFrom(serviceClazz)) {
        ... 
    }
    

    更新

    所以我设法使用 Grails 2.3.11 运行了实际示例。

    class BootStrap {
    
        def grailsApplication
    
        def init = { servletContext ->
            grailsApplication.serviceClasses.each { serviceClazz ->
                if (TestInterface.isAssignableFrom(serviceClazz.clazz)) {
                    println serviceClazz
                }
            }
        }
        def destroy = {
        }
    }
    

    如您所见,重要的部分是serviceClazz.clazz 中的clazz

    希望这会有所帮助!

    【讨论】:

    • 这会引发异常,所以我将其更改为 isAssignableFrom(serviceClazz.class) 但它仍然返回 false。
    • 有什么例外?我现在远离电脑。让我在几个小时后进行测试,我会尽快回复您。
    • 错误 groovy.lang.MissingMethodException:没有方法签名:静态 com.appposit.mmp.grails.client.event.TestInterface.isAssignableFrom() 适用于参数类型:(org.codehaus.groovy .grails.commons.DefaultGrailsS​​erviceClass) 值:[Artefact > Topic] |
    • 但是您可以将其标记为正确答案,对吗?我会很感激的:)
    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2011-06-19
    • 2021-12-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多