Grails 3 позволяет авторам использовать обработчики запуска, аналогичные тем, что есть в подключаемых модулях Grails 2. Я рассматриваю определение bean-компонентов в замыкании doWithSpring
и хочу передать значения в новый bean-компонент на основе некоторых значений конфигурации. Однако я не могу понять, как получить экземпляр grailsApplication или конфигурацию приложения. Как это сделать с Grails 3?
Получение конфигурации приложения в закрытии doWithSpring с помощью приложения Grails 3
Ответы (2)
Ваш плагин должен расширять grails.plugins.Plugin
, который определяет метод getConfig()
. См. https://github.com/grails/grails-core/blob/9f78cdf17e140de37cfb5de6671131df3606f2fe/grails-core/src/main/groovy/grails/plugins/Plugin.groovy#L65.
Вы должны иметь возможность просто ссылаться на свойство config
.
Аналогичным образом вы можете обратиться к унаследованному свойству grailsApplication
, которое определено по адресу https://github.com/grails/grails-core/blob/9f78cdf17e140de37cfb5de6671131df3606f2fe/grails-core/src/main/groovy/grails/plugins/Plugin.groovy#L47< /а>.
Надеюсь, это поможет.
grails.plugins.Plugin
. Из кода в вашей ветке grails3
неясно, что вы действительно пытаетесь сделать, но, основываясь на версии, которая находится в ветке master
, вы, вероятно, захотите зарегистрировать SshConfig
bean-компонент в doWithSpring
и просто внедрить значения конфигурации оттуда. Я бы также использовал GrailsApplicationAware
вместо явного внедрения bean-компонента grailsApplication
, но это может вообще не понадобиться.
- person Jeff Scott Brown; 18.04.2015
master
для меня бессмысленна.
- person Jeff Scott Brown; 18.04.2015
doWithSpring
в своем подклассе Application
.
- person Jeff Scott Brown; 28.08.2015
В Grails 3 я последовал совету Джеффа Скотта Брауна и вместо этого использовал GrailsApplicationAware:
Вот как вы подходите к настройке bean-компонента конфигурации:
Таким образом, в вашем новом дескрипторе плагина вам нужно изменить определение стиля Grails 2 doWithSpring на ClosureDoWithSpring, как показано ниже:
Обратите внимание, что в Grails 2 мы внедрили приложение grailsApplication, а в Grails 3 мы всего лишь объявляем bean-компонент:
/*
def doWithSpring = {
sshConfig(SshConfig) {
grailsApplication = ref('grailsApplication')
}
}
*/
Closure doWithSpring() { {->
sshConfig(SshConfig)
}
}
Теперь, чтобы получить конфигурацию вашего плагина:
src/main/groovy/grails/plugin/remotessh/SshConfigSshConfig.groovy
package grails.plugin.remotessh
import grails.core.GrailsApplication
import grails.core.support.GrailsApplicationAware
class SshConfig implements GrailsApplicationAware {
GrailsApplication grailsApplication
public ConfigObject getConfig() {
return grailsApplication.config.remotessh ?: ''
}
}
grails.plugin.remotessh.RemoteSsh.groovy:
String Result(SshConfig ac) throws InterruptedException {
Object sshuser = ac.config.USER ?: ''
Object sshpass = ac.config.PASS ?: ''
...
Теперь это ваш объект конфигурации, который передается в ваши классы src groovy. Приложение конечного пользователя передаст bean-компонент sshConfig следующим образом:
class TestController {
def sshConfig
def index() {
RemoteSSH rsh = new RemoteSSH()
....
def g = rsh.Result(sshConfig)
}
Отредактировано, чтобы добавить, только что нашел это :), что актуально или дублирует вопрос:
config
. Это то, что вы ищете? - person Jeff Scott Brown   schedule 17.04.2015