spring xml properties split with comma for list
2015-07-06 13:05
513 查看
在注入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
spring-service.xml
-------------------------------------------------
另外,如果要注入List<Bean> 且使用properties 属性占位符来配置,应该怎么做?
org.springframework.expression.spel.standard.TokenKind
这里可以看到有个BEAN_REF("@") 这个就是 spEL引用bean
--------------------------------------------------------------------------------------------------------------------------------------
下面简要分析一下 spEL 解析
总体思路就是: 使用字符串分割 将 目标对象(target)、运算符、函数、参数等,如果是函数在getValue时使用反射机制执行,并获取结果
<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时使用反射机制执行,并获取结果
相关文章推荐
- 《JAVA程序设计》实训第四天——《猜猜看》游戏
- Spring学习(6)---Bean定义及作用域的例子
- springMVC学习笔记-视图传值给Controllerb
- spring mvc controller间跳转 重定向 传参
- java框架技术之hibernate核心类和接口
- java框架技术之hibernate运行原理
- 什么是线程安全和线程不安全
- JAVA程序设计》实训第三天——《猜猜看》游戏
- Eclipse Android项目导入Android Studio时常见的编译错误及解决办法
- 《JAVA程序设计》实训第二天——《猜猜看》游戏
- eclipse错误 Exception raised during rendering:java.lang.System.arraycopy([CI[CII)V
- 下载文档--Struts2中国的文件下载被显示为空间的问题
- eclipse错误 timeout
- [LeetCode][Java] String to Integer (atoi)
- Spring MVC 之Transaction rollback
- 用Java实现AES加密
- EJB到底为何物?
- Java Web验证码
- 关于java final,并非不可更改值
- Power of Two LeetCode Java