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.SimpleTemplateEngineimport 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