java为什么spring不使用我的构造函数初始化这个bean(映射参数)
我有一个SpringBeans配置文件,在其中我将以下jackson类定义为SpringBeans
出于某种原因,在运行时filterProvider
bean是在没有map参数的情况下实例化的
您可以从docs中看到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>
更新:
从Jackson 1.9.5开始,此问题已修复(感谢Tatu)
任何帮助都将不胜感激
# 1 楼答案
我认为
<util:map>
放错地方了。我将使它成为一个独立的bean,在过滤器提供者声明之外,并引用它。或者我将其更改为<map>
,而不使用util
名称空间# 2 楼答案
看起来您在
SimpleFilterProvider
中发现了一个bug我刚刚下载了最新的源代码(1.9.4),构造函数的定义如下:
接受
mapping
的构造函数将忽略它。。。(即javadoc不正确)# 3 楼答案
我不明白为什么它不起作用
在最坏的情况下,您可以通过扩展
SimpleFilterProvider
来创建自己的类,并在Spring上下文中声明这个bean