在注入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 中的配置(逗号切割的字符串)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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时使用反射机制运行,并获取结果

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

spring xml properties split with comma for list的更多相关文章

  1. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

  2. dubbo源码—dubbo自定义spring xml标签

    dubbo为了和spring更好的集成,提供了一些xml配置标签,也就是自定义标签 spring自定义标签 spring自定义标签的方式如下: 设计配置属性和JavaBean 编写xsd文件,校验xm ...

  3. 谈谈Spring 注入properties文件总结

    本篇谈谈Spring 注入properties文件总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 spring提供了多种方式来注入properties文件,本文做一个 ...

  4. spring.xml及注解

    spring.xml配置文件中配置注解: 开启注解(及自动扫描包中bean): 1:<context:component-scan base-package="com.bzu" ...

  5. 手撸Spring框架,设计与实现资源加载器,从Spring.xml解析和注册Bean对象

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你写的代码,能接的住产品加需求吗? 接,是能接的,接几次也行,哪怕就一个类一片的 i ...

  6. Spring xml中进行面向切面的配置

    Spring xml中进行面向切面的配置 XML: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. Spring错误——Spring xml注释——org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 10; cvc-complex-type.2.3: 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。

    背景:配置spring xml,注释xml中文件元素 错误: Caused by: org.xml.sax.SAXParseException; lineNumber: 24; columnNumbe ...

  8. myeclipse中配置spring xml自己主动提示

    版权声明: https://blog.csdn.net/zdp072/article/details/24582173 这是一篇分享技巧的文章:myeclipse中配置spring xml自己主动提示 ...

  9. spring xml的配置

                    Spring xml文档头得配置 spring文档头一般是可以复制过来得,刚学习得时候一直看网上有没有配置,然后也没有找到,希望以下过程得学习可以给大家带来帮助!! 1 ...

随机推荐

  1. shell关于日期的加减

    $cat sh.sh #!/bin/bash ] ; then ydate=`date -d -1days "+%Y%m%d"` ydateother=`date -d -1day ...

  2. VBA学习笔记(3)--文件夹操作

    说明(2017.3.22): 1. 根据兰色幻想VBA80集视频教学,总结 2. 大部分可以用自带函数处理,不过复制文件夹需要用到FileSystemObject对象,打开文件夹用到shell Pub ...

  3. 【WPF】Window窗体禁用最大化/最小化按钮

    需求:弹窗的右上角不显示最大化.最小化按钮. 在< Window >节点添加属性以下属性即可: ResizeMode="NoResize" 或者直接在Propertie ...

  4. mysql 2013错误解决

    今天,莫名其妙的来了个mysql 2013错误,导致无法登陆mysql gui工具,而且dos也进不去,提示ping 127.0.0.1,百度+google后: 这是在使用 mysql 的过程中,困扰 ...

  5. dubbo_远程同步调用原理

    Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. Dubbo缺省协议,使用基于mina1.1.7+hessian3. ...

  6. Android——事件处理模型一(基于回调机制的事件处理)(转)

    Android平台的事件处理机制有两种,一种是基于回调机制的,一种是基于监听接口的,现介绍第一种:基于回调机制的事件处理.Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通 ...

  7. 数据库——SQL中EXISTS怎么用1(转)

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False 方法/步骤   EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返 ...

  8. win10设置删除文件提示框

    显示桌面,找到回收站   点击鼠标右键,点击“属性菜单”   勾选“显示删除对话框”   点击“应用”,点击“确定”.   测试一下吧,从电脑删除del删除一个文件.如下图所示,弹出了提示框.

  9. Ubuntu下,dpkg安装出错的修复

    参考 http://www.khattam.info/2009/08/04/solved-subprocess-pre-removal-script-returned-error-exit-statu ...

  10. Linux启动与禁止SSH用户及IP的登录

    以下就针对SSH方面讨论一下.假设有人特别关注Linux环境的安全性,第一就从login方面来进行讨论 1:Linux启动或禁止SSH root用户的登录 2:Linux限制SSH用户 事实上这些东西 ...