Grails Spring DSL未设置字符串属性

时间:2011-12-17 21:47:27

标签: spring grails

我服务上的2个简单字符串属性:

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'
    }
}

并且..两个属性都保持为null。看起来简单而且显而易见,但很少继续下去,我似乎明确地遵循了文档和我发现的一些帖子。任何想法?感谢。

我尝试将属性键入为String,def,static String ..没有任何帮助。 我尝试过使用bean - >在属性闭包和bean.str1等...没有任何帮助。

更新 目标只是通过Spring在Service类上设置这些字符串属性。是的,使用Config.groovy是一个选项,但这需要一个额外的步骤来访问配置..在这种情况下,我发现这是一个不必要的环节。毕竟,Spring正在使用,所以为什么不使用它。在我的例子中,它们恰好是URI(更新的示例代码)。

参见:http://grails.org/doc/1.0.x/guide/14.%20Grails%20and%20Spring.html 14.3,例如。 在dataSource注册上设置driverClassName = "org.hsqldb.jdbcDriver"的位置。我尝试将java样式的setter和getter添加到Service类,仍为null

2 个答案:

答案 0 :(得分:2)

你不会疯了,这应该完全按照你的想法运作。

我准备了一个示例项目,以便在github上确认这一点:

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

我用grails 1.3.4编写了这个例子,这恰好是我在本地安装的版本,自从我使用它以来已经有一段时间了。

您可能偶然发现了正在使用的版本中的错误,您的引用是1.0.x文档,您使用的是哪个版本?

答案 1 :(得分:0)

我不了解总体目标。

resources.groovy可用于定义bean。 MyService因为会被grails自动“注入”,所以你可以通过以下方式访问它:

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域对象应该维护与数据相关的数据和逻辑。因此,在维护与服务相关的状态时要考虑这一点。

我已经在resources.groovy中为apache-camel成功配置了bean。请注意,这些是初始化基础apache camel对象,而不是通常“免费”提供的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