Как получить доступ к конфигурации Grails в Grails 2.0?
я получил последнюю веху Grails 2.0, и я вижу предупреждение об устаревании для ConfigurationHolder
класс:
org.codehaus.groovy.grails.commons.ConfigurationHolder
в сообщении об устаревании просто говорится:" Вместо этого используйте инъекцию зависимостей", что мне не очень полезно. Я понимаю инъекцию зависимостей, но как я могу подключить боб с правильной конфигурацией Grails, чтобы я мог получить к нему доступ во время выполнения? Мне нужно получить доступ к конфигурации из других мест, кроме моих контроллеров и тегов (таких как BootStrap
).
6 ответов:
Если вам это нужно в артефакте, который поддерживает инъекцию зависимостей, просто введите
grailsApplication
class MyController { def grailsApplication def myAction = { def bar = grailsApplication.config.my.property } }
Если вам это нужно в бобе, скажем,
src/groovy
илиsrc/java
, провод его с помощьюconf/spring/resources.groovy
// src/groovy/com/example/MyBean.groovy class MyBean { def grailsApplication def foo() { def bar = grailsApplication.config.my.property } } // resources.groovy beans = { myBean(com.example.MyBean) { grailsApplication = ref('grailsApplication') // or use 'autowire' } }
в любом другом месте, вероятно, проще всего либо передать объект конфигурации классу, который в нем нуждается, либо передать определенные свойства, которые необходимый.
// src/groovy/com/example/NotABean.groovy class NotABean { def foo(def bar) { ... } } // called from a DI-supporting artifact class MyController { def grailsApplication def myAction = { def f = new NotABean() f.foo(grailsApplication.config.my.property) } }
обновление:
Берт Беквит недавно написал пару сообщений в блоге об этом. обсуждается, используя
getDomainClass()
из классов домена, в то время как другой предлагает опцию создание собственного класса держателя (если ни одно из приведенных выше решений не подходит).
альтернативой grailsApplication является держатели класса,
import grails.util.Holders def config = Holders.config
вы получаете конфигурацию непосредственно от держателей, не требуется инъекция, что хорошо для классов утилит и т. д.
вы можете ввести "grailsApplication" в исходный файл. вот пример conf / Bootstrap.groovy
class BootStrap { def grailsApplication def init = { servletContext -> println grailsApplication.config } def destroy = { } }
еще один не устаревший способ получить конфигурацию:
ApplicationContext context = ServletContextHolder.servletContext. getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT) as ApplicationContext ConfigObject config = context.getBean(GrailsApplication).config
это работает в ситуациях, когда нет введенных родительских доступных, таких как классы сервлетов или статические методы.
вы можете получить доступ к конфигурации grails
Контроллер
class DemoController { def grailsApplication def demoAction = { def obj = grailsApplication.config.propertyInConfig } }
сервис :
class DemoService { def grailsApplication def demoMethod = { def obj = grailsApplication.config.propertyInConfig } }
в taglib:
class DemoTaglib { def grailsApplication static namespace = "cd" def demoMethod = { def obj = grailsApplication.config.propertyInConfig out << obj } }
вы можете вызвать этот метод taglib в представлении как
<cd:demoMethod/>
в виде :
<html> <head><title>Demo</title></head> <body> ${grailsApplication.config.propertyInConfig} </body> </html>