Grails Spring DSL не устанавливает свойства строки - PullRequest
3 голосов
/ 18 декабря 2011

2 простых свойства String в моем Сервисе:

class MyService {

    static transactional = false

    def uri1
    def uri2
}

resources.groovy:

beans = {
    myService(com.myapp.MyService) {
        uri1 = 'http://my.endpoint1.com'
        uri2 = 'http://my.endpoint2.com'
    }
}

И .. Оба свойства остаются нулевыми. Кажется простым и достаточно очевидным, но мало что можно сделать, и я, кажется, явно следую за документом и некоторыми сообщениями, которые я нашел ... Есть идеи? Спасибо.

Я пробовал вводить свойства как String, def, static String ... ничего не помогает. Я пытался использовать bean -> в свойствах closure и bean.str1 и т. Д ... ничего не помогает.

UPDATE: Цель состоит в том, чтобы просто установить эти строковые свойства в классе Service через Spring. Да, использование Config.groovy является опцией, но для этого требуется дополнительный шаг доступа к конфигурации ... который я считаю ненужным обручем для перехода в этом случае. В конце концов, Spring используется, так почему бы не использовать его. В моем случае это URI (обновленный пример кода).

См., Например: http://grails.org/doc/1.0.x/guide/14.%20Grails%20and%20Spring.html 14,3. Где driverClassName = "org.hsqldb.jdbcDriver" установлено для регистрации источника данных. Я попытался добавить сеттеры и геттеры в стиле Java в класс Service, но все равно null

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Вы не сходите с ума, это должно работать точно так, как вы думаете.

Я подготовил пример проекта, чтобы подтвердить это на github :

https://github.com/gid79/so-q8548146-spring-dsl

Я подготовил пример с grails 1.3.4, который оказался версией, которую я установил локально, прошло немного времени с тех пор, как я его использовал.

Возможно, вы наткнулись на ошибку в используемой вами версии, ваши ссылки на документацию 1.0.x, какую версию вы используете?

0 голосов
/ 18 декабря 2011

Я не понимаю общую цель.

resources.groovy может использоваться для определения бинов. MyService, потому что Grail будет автоматически «везде» вводиться, поэтому вы можете получить к нему доступ просто:

def myService

Затем вы можете вызывать методы на myService, обычно на вашем контроллере.

Если вы пытаетесь определить «настройки приложения», то Config.groovy - вот, куда я понимаю, он должен идти:

icooeee {
  defaultCategory = "lifestyle"
}

И прочтите это в контроллерах Grails, службах и т. Д .:

ConfigurationHolder.config.icooeee.defaultCategory

Если вы хотите инициализировать объект bean-java, который определен как src / java, в плагине или библиотеке. Тогда аргументы конструктора имеют смысл согласно документации grails, о которой вы говорите: http://grails.org/doc/1.0.x/guide/14.%20Grails%20and%20Spring.html

Дизайн, управляемый MVC / доменом, говорит, что объекты домена Grails должны поддерживать данные и логику, относящиеся к данным. Поэтому учитывайте это при сохранении состояния, относящегося к услугам.

Я успешно настроил bean-компоненты для apache-camel в resources.groovy. Обратите внимание, что они инициализируют базовые объекты верблюда apache, а не объекты grails, которые обычно предоставляются «бесплатно»:

case "development":
  jmsConnectionFactoryLocal(org.apache.activemq.ActiveMQConnectionFactory) {
    brokerURL = 'vm://localhost'
  }

  _jmsConnectionFactory(ActiveMQConnectionFactory) {
    brokerURL = ConfigurationHolder.config.caller.activemqServer
  }

  jmsConnectionFactory(org.apache.activemq.pool.PooledConnectionFactory) {
    connectionFactory = ref('_jmsConnectionFactory')
  }

  jmsConfig(org.apache.camel.component.jms.JmsConfiguration) {
    connectionFactory = ref('_jmsConnectionFactory')
    transacted = true
    concurrentConsumers = 10
  }

  activemqServer(org.apache.activemq.camel.component.ActiveMQComponent) {
    configuration = ref('jmsConfig')
  }
  break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...