脚本宝典收集整理的这篇文章主要介绍了关于Spring properties --> Map 注入到bean中,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
SPRing proPErties to map
一个key-value形式的properties文件 以Map的形式注入到Spring的bean中
properties文件形式
RF09001=fooService#method1#name,phone
spring 配置
<bean id="noMethodMap" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:foo.properties"/> </bean>
注入到Bean中
@Resource(name="noMethodMap") private Map<String, String> noMethodMap;
其他
如何定位注入源码
修改为一个不存在的资源名称
@Resource(name="nonexist")
此时启动会报错
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'nonexist' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.context.annotation.COMmonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:522)
可知是在哪里注入的了
在哪里将PropertiesFactoryBean转成Map
同样的处理方式 将注入变量修改成一个错误的类型 查看错误信息即可
private String noMethodMap; // map --> String
启动会报错
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'noMethodMap' is expected to be of type 'java.lang.String' but was actually of type 'java.util.Properties' at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:378)
就知道是在哪里进行类型转换的了
如果想对properties-->map做一下自定义的处理呢
如RF09001-RF09010对应的都是同一个value
RF09001-RF09003=fooService#method1#name,phone
但是想Map中的实际形式为
RF09001=fooService#method1#name,phone RF09002=fooService#method1#name,phone RF09003=fooService#method1#name,phone
继承PropertiesFactoryBean
覆盖createProperties
即可
public class MyPropertiesFactoryBean extends PropertiesFactoryBean{ @Override protected Properties createProperties() throws IOException { Properties properties = super.createProperties(); Enumeration<String> propertyNames = (Enumeration<String>) properties.propertyNames(); while(propertyNames.hasMoreElements()){ String name = propertyNames.nextElement(); if(name.matches("\w+-\w+")){ String rawName = name; String[] split = rawName.split("-"); Integer start = Integer.valueOf(split[0].substring(2)); Integer end = Integer.valueOf(split[1].substring(2)); for (int i = start; i <= end; i++) { properties.setProperty("RF" + i, properties.getProperty(rawName)); } } } return properties; }
spring配置改成
<bean id="noMethodMap" class="com.foo.app.util.MyPropertiesFactoryBean">
以上是脚本宝典为你收集整理的关于Spring properties --> Map 注入到bean中全部内容,希望文章能够帮你解决关于Spring properties --> Map 注入到bean中所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。