良い質問。そして、あなたが問題の根本原因を見つけたいと思っていることに感謝します. ここにあなたの答えがあります: -
クロージャーを呼び出す代わりに、 SendSesMail Bean を直接呼び出してメールを送信できますsesMail
。Groovy クラスは次のようになります。
class MyGroovyClass{
def sendSesMail
def sendSomeMails(){
String msgId = sendSesMail.send{
from props.from
replyTo props.replyTo
to prop.to
html props.body
}
}
}
ご覧のとおり、SendSesMail はサービス クラスではなく、単なるPOGOですresources.groovy
。そう:
何かのようなもの:
//resources.groovy
beans = {
sendSesMail(grails.plugin.aws.ses.SendSesMail)
}
また、上記の方法を直接使用すると、構成がバイパスされることに注意してくださいgrails.plugin.aws.ses.enabled
。したがって、明示的に処理する必要があります。
- ここMetaClassInjector
sesMail
で引数として Closure を取るターゲット クラスに対する metaClasses であるメソッドの定義を非常によく見つけることができます。このクラスは、基本的にプラグイン定義から注入/追加するために使用されます。次のように見つけることができますdynamicMethods
AwsGrailsPlugin (行: 37) --> AwsPluginSupport (行: 86) --> MetaClassInjector (行: 50)
また、MetaClassInjector (45 行目と 46 行目あたり) を見ると、ターゲット クラスはコントローラー クラスとサービス クラスです。sesMail
したがって、これら 2 つのアーティファクトで利用可能なクロージャが見つかります。
あなたの好奇心に対処するのに十分明確であることを願っています. :)