Spring Bean构造函数使用常量列表从其他bean加载

时间:2016-01-20 01:28:52

标签: java spring list inversion-of-control

我有一个带有像这样的构造函数的类bean

public Test(final Integer c01,final List<Students>c02){this.c01 = c01;this.c02 = c02;return;}    

学生来自另一个bean,它有一个方法负责从数据库中检索我有一个像这样的bean声明

<constructor-arg index="0" type="java.lang.Integer" value='13'/>         
<constructor-arg index="1" type="java.util.List" value="#{myDAO.loadStudents(#{T(java.util.Arrays).asList(T(Constants).HOLIDAY,T(Constants).OUT_OF_OFFICE,T(Constants).SICK_LEAVE)})}"/>

该方法有这样的签名

public List<Student>loadStudents(final List<String>filters){}

我将尝试解释我需要用一个List来填充构造函数的2索引,我需要从另一个bean中检索DB,这个bean传递一个List,我有一个静态的常量,当然这可能是只使用这个签名Java

轻松解决
new Test(13,Arrays.asList(Constants.HOLIDAY,Constants.OUT_OF_OFFICE,Constant.SICK_LEAVE));

但是当我有我的XML Spring配置文件时,会抛出类似

的错误
Unexpected token. Expected 'identifier' but was 'lcurly({)'

这段代码有什么问题我使用spring

并不是很好
 <constructor-arg index="1" type="java.util.List" value="#{myDAO.loadStudents(#{T(java.util.Arrays).asList(T(Constants).HOLIDAY,T(Constants).OUT_OF_OFFICE,T(Constants).SICK_LEAVE)})}"/>

1 个答案:

答案 0 :(得分:1)

你的SpEL表达太复杂了:-) 我建议您使用Spring Java配置,并在纯Java代码中写出您要尝试做的事情。

顺便说一下,我对从Spring配置中读取数据库的建议存在疑虑(强烈)。但这不是问题所在,所以我会试着忽略它: - )