如何将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?
答案 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>