zoukankan      html  css  js  c++  java
  • Spring初始化 Map 和 解析Json value

    单独定义Map数据结构的bean:
    <bean id= "expToLevelMap" class="org.springframework.beans.factory.config.MapFactoryBean" >
               <property name ="sourceMap">
                   <map>
                        <entry key ="expToLevel">
                             <value>
                             <![CDATA[
                            [{id:0, "name":"江湖小虾","level":0,"exp":0},
                            {id:1, "name":"江湖小虾","level":1,"exp":6},
                            {id:2, "name":"江湖小虾","level":2,"exp":16},
                            {id:3, "name":"江湖小虾","level":3,"exp":40},
                            {id:4, "name":"江湖小虾","level":4,"exp":70},
                            {id:5, "name":"江湖小虾","level":5,"exp":110},
                            {id:6, "name":"江湖小虾","level":6,"exp":190},
                            {id:7, "name":"江湖小虾","level":7,"exp":310},
                            {id:8, "name":"江湖小虾","level":8,"exp":470},
                            {id:9, "name":"江湖小虾","level":9,"exp":670},
                            {id:10, "name":"江湖小虾","level":10,"exp":790}
                            ]
                             ]]>
                             </value>
                        </entry>
                   </map>
               </property>
          </bean >
      property可以定义很多个,这样的方式,用spring配置就可以重用这个map里的值了。
     
      value是一个json数组,数组中是一个exp值和level的对应关系的结构。那么我们在spring启动的时候就解析这个value,把它转成java中Object,提供给其他组件使用。
     
      接下来要做的是解析这个value到jsonArray,再解析到object TreeMap。
     
      所以我们在初始化bean容器的时候就进行解析:
      这里使用 @PostConstruct 
      
    @Service("expToLevelService" )
    public class ExpToLevelServiceImpl {
    
        @Resource
        private Map<String , String> expToLevelMap;
    
        private TreeMap<Long , ExpToLevelObj>              expToLevelTreeMap;
    
        @PostConstruct
        public void init () {
            expToLevelTreeMap = new TreeMap<Long , ExpToLevelObj>();
            JSONArray array = JSONArray.parseArray (expToLevelMap. get("expToLevel" ));
            for ( Object object : array) {
                JSONObject jsonObj = (JSONObject) JSONObject.parse (object. toString());
                ExpToLevelObj obj = new ExpToLevelObj(jsonObj .getIntValue( "id"), jsonObj.getIntValue ("exp") ,
                                                      jsonObj.getIntValue ("level") , jsonObj .getString( "name"));
               
                expToLevelTreeMap.put (jsonObj. getLongValue("exp" ), obj);
            }
        }
    
        public TreeMap<Long , ExpToLevelObj> getExpToLevelTreeMap (){
            return expToLevelTreeMap ;
        }
       
    }
    
    
      这里又使用了TreeMap的特性,把exp(经验值)和level(等级)的对应关系放入TreeMap后,外界想知道一个随机的exp查出在多少level,是比较方便的。
     最后我们会组装好一个expToLevelTreeMap 提供出去。
     
    所以整个过程类似读取配置文件,进行不同的配置。


    ExpToLevelObj
    :
    public class ExpToLevelObj {
    
            public ExpToLevelObj(){
            }
    
            public ExpToLevelObj(int id, int exp, int level, String name){
                super();
                this.id = id;
                this.exp = exp;
                this.level = level;
                this.name = name;
            }
    
            private int    id;
            private int    exp;
            private int    level;
            private String name;
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public int getExp() {
                return exp;
            }
    
            public void setExp(int exp) {
                this.exp = exp;
            }
    
            public int getLevel() {
                return level;
            }
    
            public void setLevel(int level) {
                this.level = level;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
        }
    View Code
    
    

    外界使用:

      下面的代码就可以查出25exp,处于多少等级了

    TreeMap < Long, ExpToLevelObj > treeMap = expToLevelService . getExpToLevelTreeMap ();
    
    expToLevelObj = treeMap . lowerEntry( 25) .getValue () ;
    
    expToLevelObj . getLevel()
     
     
     
  • 相关阅读:
    javascript教程系列-10.DOM(下)
    javascript教程系列-9.DOM(上)
    javascript教程系列-8.BOM
    javascript教程系列-7.Date对象
    javascript教程系列-6.String类型
    javascript教程系列-5.数组
    Python字符串、元组、列表、字典互相转换的方法
    python 中函数
    python中的字符串 列表 字典
    python 基础 知识
  • 原文地址:https://www.cnblogs.com/killbug/p/3469463.html
Copyright © 2011-2022 走看看