Конфигурация плагина Grails

Я не уверен, что вы пытаетесь достичь в своем методе

public <T> void run(T x){ // Gets an unbounded T which means it can accept anything under Object.

    if(x instanceof HashMap){
      ((HashMap<String,String>)x).put("foo","bar"); // How are you so sure it is an HashMap<String,String>? It can be any HashMap,or even Object!! That is exactly why your compiler is telling it is doing an unchecked cast.
    }
  }

Это отвечает вашему первому пункту.

Второй момент, нам нужно больше ясности в этом, чтобы объяснить.

Третий момент. В Java есть нечто, называемое стирание типа, когда универсальный метод не может знать тип объекта во время выполнения. Вы можете перейти в класс для чтения или использовать ограниченные символы для проверки во время компиляции.

9
задан Kimble 9 May 2009 в 12:37
поделиться

2 ответа

Если это всего лишь небольшая (читай: один элемент) конфигурационная опция, возможно, будет проще пропустить какой-нибудь файл свойств. Если есть некоторое количество параметров конфигурации, и некоторые из них должны быть динамическими, я бы посоветовал сделать то, что делает плагин Acegi Security - возможно, добавить файл в /grails-app/conf/plugin_name_config.groovy.

Дополнительным преимуществом является то, что пользователь может выполнять отличный код для вычисления своих параметров конфигурации (намного лучше, чем использование файлов свойств), а также возможность легко создавать различные среды.

ознакомьтесь с http://groovy.codehaus.org/ConfigSlurper , это то, что внутри Grails используют для перехвата конфигов вроде config.groovy.

//e.g. in /grails-app/conf/MyWebServicePluginConfig.groovy
somePluginName {
   production {
      property1 = "some string"
   }
   test {
      property1 = "another"
   }
}

//in your myWebServicePlugin.groovy file, perhaps in the doWithSpring closure
GroovyClassLoader classLoader = new GroovyClassLoader(getClass().getClassLoader())
ConfigObject config
try {
   config = new ConfigSlurper().parse(classLoader.loadClass('MyWebServicePluginConfig'))
} catch (Exception e) {/*??handle or what? use default here?*/}
assert config.test.property1.equals("another") == true
7
ответ дан 4 December 2019 в 10:34
поделиться

Вы можете захотеть сохранить это просто (tm). Вы можете определить URL прямо в Config. groovy - включая настройки среды - и при необходимости обращайтесь к нему из вашего плагина, используя grailsApplication.config (в большинстве случаев) или объект ConfigurationHolder.config (см. подробности в руководстве ).

В качестве дополнительного бонуса этот параметр также может быть определен в стандартных файлах свойств Java или в других файлах конфигурации, указанных в grails.config.locations.

например, в Config.groovy

// This will be the default value...
myPlugin.url=http://somewhe.re/test/endpoint
environments {
  production {
    // ...except when running in production mode
    myPlugin.url=http://somewhe.re/for-real/endpoint
  }
}

позже, в службе, предоставляемой вашим plugin

import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
  def url = ConfigurationHolder.config.myPlugin.url
  // ...
} 
13
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: