将Spring Bean绑定到Grails中的服务?

时间:2013-04-10 17:01:40

标签: spring grails

如何将Spring DSL中声明的列表绑定到我的服务参数?

我有以下bean声明

beans = {
   defaultSkillList = [
       { Skill s  -> 
             name="Shooting"    
             description = "Shooting things..."},
   { Skill s ->
             name="Athletics"
             description = "Running, jumping, dodging ..."}
     ]
}

我有以下服务声明:

class GameService {

    def defaultSkillList

    def createGame(Game gameInstance) {
       //...
    }
}

我在尝试访问NullReferenceException时获得了defaultSkillList

我应该如何访问这个bean?

1 个答案:

答案 0 :(得分:3)

你不能在bean DSL中声明这样的列表,你需要像

这样的东西
beans = {
  defaultSkillList(ArrayList, [....])
}

但是DSL不会让你定义一个匿名内部bean的列表(好吧,它会接受语法defaultSkillList(ArrayList, [{Skill s -> ...}, ... ],但是它会给你一个闭包列表,而不是把闭包当作bean定义来处理) 。您需要使用名称声明单个bean,然后ref声明它们,例如

beans = {
  'skill-1'(Skill) {
    name="Shooting"    
    description = "Shooting things..."
  }
  'skill-2'(Skill) {
    name="Athletics"
    description = "Running, jumping, dodging ..."
  }

  defaultSkillList(ArrayList, [ref('skill-1'), ref('skill-2')])
}

或者只是放弃DSL并使用grails-app/conf/spring/resources.xml中的XML代替:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">

  <util:list id="defaultSkillList">
    <bean class="com.example.Skill" p:name="Shooting" p:description="..." />
    <bean class="com.example.Skill" p:name="Athletics" p:description="..." />
  </util:list>
</beans>