spring xml properties split with comma for list

在注入spring bean 属性值的时候经常会用到list, 一般使用方式如下:

<bean id="testBean" class="com.mytest.TestBean">

    <property name="myList">

         <list>

             <value> 1 </value>

             <value> 2 </value>

         </list>

    </properties>

</bean>


但是如果将这个list的值通过el表达式从properties文件中获取,如何做到,properties中存储的是键值对的数据,是不能正确存储列表数据的,只能使用字符串分割成数组、列表的形式。至于字符串的分割可以自己来分割也可以使用现有的spEL。

1. properties 中的配置(逗号分割的字符串)

    

2. bean的list属性

     

3. spring xml bean  注册 属性值


4. bean属性的setter 获取到了我们想要的结果



-------------------------------------------------

先不要急着用,其他spring还提供了更好用的InlineList, 即以大括号计算, 如 "{'a','b','c'}"  , 所以还可以这样配置

xx.properties

imageDomains={'ezhe.com','gozap.com','chouti.com'}

spring-service.xml

<bean id="hostsService" class="com.gozap.ezhe.service.impl.HostsServiceImpl">
        <property name="imageDomains" value="#{${imageDomains}}" />
</bean>


-------------------------------------------------

另外,如果要注入List<Bean> 且使用properties 属性占位符来配置,应该怎么做?

org.springframework.expression.spel.standard.TokenKind

// ordered by priority - operands first
	LITERAL_INT, LITERAL_LONG, LITERAL_HEXINT, LITERAL_HEXLONG, LITERAL_STRING, LITERAL_REAL, LITERAL_REAL_FLOAT,
	LPAREN("("), RPAREN(")"), COMMA(","), IDENTIFIER,
	COLON(":"),HASH("#"),RSQUARE("]"), LSQUARE("["),
	LCURLY("{"),RCURLY("}"),
	DOT("."), PLUS("+"), STAR("*"),  MINUS("-"), SELECT_FIRST("^["), SELECT_LAST("$["), QMARK("?"), PROJECT("!["),
	DIV("/"), GE(">="), GT(">"), LE("<="), LT("<"), EQ("=="), NE("!="),
	MOD("%"), NOT("!"), ASSIGN("="), INSTANCEOF("instanceof"), MATCHES("matches"), BETWEEN("between"),
	SELECT("?["),   POWER("^"),
	ELVIS("?:"), SAFE_NAVI("?."), BEAN_REF("@"), SYMBOLIC_OR("||"), SYMBOLIC_AND("&&"), INC("++"), DEC("--")


这里可以看到有个BEAN_REF("@") 这个就是 spEL引用bean


<bean id="hostsService" class="com.gozap.ezhe.service.impl.HostsServiceImpl">
        <property name="imageDomains" value="#{${imageDomains}}" />
        <property name="daos" value="#{ {@demoDao, @adminDao}}" />
    </bean>



--------------------------------------------------------------------------------------------------------------------------------------

下面简要分析一下 spEL 解析

总体思路就是: 使用字符串分割 将 目标对象(target)、运算符、函数、参数等,如果是函数在getValue时使用反射机制执行,并获取结果











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值