2017-04-13 9 views
0

サービスを動的に呼び出して、サービス名が文字列値になるようにするには、以下のコードを使用してgrailsプロジェクトのすべてのサービス名を一覧表示できます。Grails:文字列からサービスとサービス名を呼び出す方法

import org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin 

for (type in ['service']) { 

    for (artifactClass in ctx.grailsApplication."${type}Classes") { 

     def clazz = artifactClass.clazz 

     def annotation = clazz.getAnnotation(GrailsPlugin) 
     if (annotation) { 
     println "$type $clazz.name from plugin '${annotation.name()}'" 
     } 
     else { 
     println "$type $clazz.name from application" 
     } 
    } 
} 

ここでは、そこにこのidea.Pleaseが私を助けて使用してサービスを呼び出すための任意のオプションをservice.IsのartifactClassを取得します。

答えて

0

あなたはすでに `grailsApplication`を持っている場合、彼に追加するにはapplicationContext

//inject application context bean 
def applicationContext 

//to use 
applicationContext."${yourServiceName}".serviceMethod() 
+0

からのサービスのためのBeanを取得することができ、あなたはgrailsApplication.mainContext''経由でコンテキストを取得することができます。私はまた、文字列補間を使うのではなく、メソッド呼び出し 'getBean'を使う方が好きですが、それは機能的ではなく個人的なものです。' grailsApplication.mainContext.getBean( 'yourServiceName')。serviceMethod() ' – tylerwal

関連する問題