为什么spring不使用我的构造函数来初始化这个bean(Map参数)

Itt*_*tai 2 java spring jackson

我有一个spring beans配置文件,我将以下jackson类定义为spring bean.
出于某种原因,在运行时,filterProviderbean在没有map参数的情况下被实例化.
您可以从文档中看到它SimpleFilterProvider确实具有这样的构造函数并SimpleBeanPropertyFilter实现BeanPropertyFilter.

<bean id="productAttributesAndAdvertiserNameFilter" class="org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter" factory-method="filterOutAllExcept">
        <constructor-arg value="name"/>
    </bean>
    <bean id="offerIdFilter" class="org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter" factory-method="filterOutAllExcept">
        <constructor-arg value="id"/>
    </bean>
    <bean id="filterProvider" class="org.codehaus.jackson.map.ser.impl.SimpleFilterProvider">
        <constructor-arg>
            <util:map value-type="org.codehaus.jackson.map.ser.BeanPropertyFilter">
                <entry key="onlyNameFilter" value-ref="productAttributesAndAdvertiserNameFilter" />
                <entry key="onlyIdFilter" value-ref="offerIdFilter" />
            </util:map>
        </constructor-arg>
    </bean>
Run Code Online (Sandbox Code Playgroud)

更新:
截至杰克逊1.9.5这个问题已修复(感谢Tatu)

任何帮助,将不胜感激.

ben*_*y23 8

看起来你发现了一个错误SimpleFilterProvider.

我刚下载了最新的源代码(1.9.4),构造函数定义如下:

public SimpleFilterProvider() {
    _filtersById = new HashMap<String,BeanPropertyFilter>();
}

/**
 * @param mapping Mapping from id to filter; used as is, no copy is made.
 */
public SimpleFilterProvider(Map<String,BeanPropertyFilter> mapping) {
    _filtersById = new HashMap<String,BeanPropertyFilter>();
}
Run Code Online (Sandbox Code Playgroud)

取代mapping它的构造函数...(即javadoc不正确)

  • 哦,讨厌.JIRA提出,Tatu通常很擅长快速解决这些问题.http://jira.codehaus.org/browse/JACKSON-773 (2认同)