Grails使用Spring,我们可以搭载Spring对资源加载的支持,以在应用程序的类路径中查找示例文件。 我们可以使用Spring org.springframework.core.io.Resource
或org.springframework.core.io.ResourceLoader
接口在我们的应用程序中查找资源。
从Grails 2.0开始,我们还可以使用org.codehaus.groovy.grails.core.io.ResourceLocator
接口。 在我们的代码中,我们可以使用实现了ResourceLocator
接口的grailsResourceLocator
服务。 我们必须将grailsResourceLocator
服务注入我们的代码中,并使用方法findResourceForURI(String)
来查找资源。 grailsResourceLocator
服务的优点是它了解Grails应用程序。 例如,也可以访问插件中的资源。
首先,我们来看一个带有Resource
属性和名称template
Grails服务样本。 在我们的代码中,我们使用getURL()
方法获取实际资源。 我们在grails-app/conf/Config.groovy
设置的Resource
属性的值。 我们依赖于Spring属性的自动转换,因此我们可以使用类似classpath:filename.txt
的值,它将被转换为Resource
实现。
package com.mrhaki.templates
import groovy.text.SimpleTemplateEngine
import org.springframework.core.io.Resource
class MessageService {
Resource template
String followUpMessage(final String user, final String subject) {
final Map binding = [user: user, subject: subject]
final SimpleTemplateEngine templateEngine = new SimpleTemplateEngine()
templateEngine.createTemplate(template.URL).make(binding)
}
}
在grails-app/conf/Config.groovy
我们定义:
...
beans {
messageService {
template = 'classpath:/com/mrhaki/templates/mail.template'
}
}
...
如果使用grailsResourceLocator
我们将获得以下服务实现:
package com.mrhaki.templates
import groovy.text.SimpleTemplateEngine
class MessageService {
def grailsResourceLocator
String template
String followUpMessage(final String user, final String subject) {
final Resource template = grailsResourceLocator.findResourceForURI(template)
final Map binding = [user: user, subject: subject]
final SimpleTemplateEngine templateEngine = new SimpleTemplateEngine()
templateEngine.createTemplate(template.URL).make(binding)
}
}
用Grails 2.2.4编写的代码