绑定地图时调用自定义构造函数

时间:2011-01-05 13:32:51

标签: java spring data-binding collections spring-mvc

当列表绑定时,我可以通过以这种方式在AutoPopulatingList中使用自定义ElementFactory来控制对象的实例化方式(对于instace调用具有多个参数的构造函数):

public class Foo{

    private List<NestedFoo> nested = new AutoPopulatingList<NestedFoo>(new ElementFactory<NestedFoo>() {
        @Override
        public NestedFoo createElement(int index) throws ElementInstantiationException {
            return new NestedFoo(index);
        }       
    });
}

当集合是Map而不是List时,有没有办法做类似的事情?我的意思是当表单发送类似嵌套的['fooParam']时,我想在地图“自动生成”时用fooParam调用构造函数。

感谢。

1 个答案:

答案 0 :(得分:4)

在Spring中不知道任何解决方案,但GuavaMapMaker类允许您创建计算地图:

ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(4)
   .softKeys()
   .weakValues()
   .maximumSize(10000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           // this is where your values are created on demand
           return createExpensiveGraph(key);
         }
       });

<强>参考:


顺便说一句,Apache Commons / Collections有类似的功能:

MapUtils.lazyMap(Map, Transformer)