Статьи

Grails Goodness: доступ к ресурсам с помощью ресурса и ResourceLocator

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

Оригинальная статья

Ссылка: Grails Goodness: доступ к ресурсам с помощью Resource и ResourceLocator от нашего партнера по JCG Хьюберта Иккинка в блоге JDriven .