好问题。我很感激您对找到问题的根本原因感到好奇。以下是你的答案:-
您可以直接调用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,所以它不会在这个 groovy 类中自动装配,除非你在resources.groovy
. 所以:
就像是:
//resources.groovy
beans = {
sendSesMail(grails.plugin.aws.ses.SendSesMail)
}
还请注意,直接使用上述方法将绕过grails.plugin.aws.ses.enabled
配置。所以你必须明确地处理它。
- 您可以在MetaClassInjector中很好地找到方法的定义,
sesMail
该方法是 metaClasses over target classes 将 Closure 作为参数。此类基本上用于从插件定义中注入/添加。你可以找到它dynamicMethods
AwsGrailsPlugin(第 37 行)--> AwsPluginSupport(第 86 行)--> MetaClassInjector(第 50 行)
您还可以在MetaClassInjector中看到(大约第 45 和 46 行),目标类是控制器和服务类。sesMail
因此,您会在这 2 个人工制品中找到可用的闭包。
我希望它足够清楚以解决您的好奇心。:)