Grails использует Spring, и мы можем воспользоваться поддержкой Spring для загрузки ресурсов, чтобы найти примеры файлов в classpath нашего приложения. Мы можем использовать Spring org.springframework.core.io.Resource
или org.springframework.core.io.ResourceLoader
интерфейс для поиска ресурсов в нашем приложении.
А начиная с Grails 2.0 мы также можем использовать интерфейс org.codehaus.groovy.grails.core.io.ResourceLocator
. В нашем коде мы можем использовать сервис grailsResourceLocator
который реализует интерфейс ResourceLocator
. Мы должны внедрить сервис grailsResourceLocator
в наш код, и мы используем метод findResourceForURI(String)
для поиска ресурса. Преимущество службы grailsResourceLocator
заключается в том, что она знает о приложении Grails. Например, ресурсы в плагинах также могут быть доступны.
Сначала мы рассмотрим пример сервиса Grails со свойством Resource
с template
имени. В нашем коде мы получаем реальный ресурс, используя метод getURL()
. Значение свойства Resource
мы устанавливаем в grails-app/conf/Config.groovy
. Мы полагаемся на автоматическое преобразование свойств Spring, чтобы мы могли использовать значение типа classpath:filename.txt
и оно будет преобразовано в реализацию Resource
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
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
мы определяем:
1
2
3
4
5
6
7
|
... beans { messageService { template = 'classpath:/com/mrhaki/templates/mail.template' } } ... |
Если мы используем grailsResourceLocator
мы получаем следующую реализацию сервиса:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
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