将mongo自定义转换器拆分为多个上下文文件?

时间:2012-01-20 07:40:33

标签: spring spring-data

这是我的配置:

    <org.springframework.version>3.1.0.RELEASE</org.springframework.version>
    <spring.data.mongo.version>1.0.0.RC1</spring.data.mongo.version>

是否可以从这个1弹簧上下文文件中分割出来:

<mongo:mapping-converter base-package="my.package.converter">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="my.package.converter.ClassAbcReadConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.ClassAbcWriteConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassDefReadConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassDefWriteConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassGhiWriteConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassGhiReadConverter" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

分为2个弹簧上下文文件(在不同的maven模块中),如下所示?

文件1-context.xml中

<mongo:mapping-converter base-package="my.package.converter">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="my.package.converter.ClassAbcReadConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.ClassAbcWriteConverter" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

文件2-context.xml中

<mongo:mapping-converter base-package="my.package.converter">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassDefReadConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassDefWriteConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassGhiWriteConverter" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converter.subpackage.ClassGhiReadConverter" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

mongo转换器的'合并'是否有任何有用的属性?

3 个答案:

答案 0 :(得分:4)

custom-converters元素实际上也有一个base-package属性,它会触发列出的包,以便对ConverterGenericConverter实施进行扫描。您在mapping-converter级别使用的是在启动时获取域类。因此,只需删除显式定义的转换器bean并添加其他属性即可。

<mongo:mapping-converter base-package="my.package.entities">
  <mongo:custom-converters base-package="my.package.converters" />
</mongo:mapping-converter>

答案 1 :(得分:0)

如果配置为:

,我也会遇到同样的问题
<mongo:mapping-converter>
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="com.abc.converter.mongo.DBObjectToDateTime" />
        </mongo:converter>
        <mongo:converter>
            <bean class="com.abc.converter.mongo.DateTimeToDBObject" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

它工作正常。 如果配置为:

<mongo:mapping-converter base-package="com.abc.*.entities">
    <mongo:custom-converters base-package="com.abc.converter.mongo" />
</mongo:mapping-converter>

未应用转换器。 pagckage com.abc。*。实体具有@Document注释类以及@Entity注释类。

答案 2 :(得分:0)

<mongo:mapping-converter base-package="my.package.entities">
  <mongo:custom-converters base-package="my.package.converters" />
</mongo:mapping-converter>

不能在1.1.0.RELEASE中工作。如果你看看XSD文件,只有mongo:mapping-converter和converter define base-package。所以你仍然需要这样做。

<mongo:mapping-converter base-package="my.package.entities">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="my.package.converters.DBObjectToDateTime" />
        </mongo:converter>
        <mongo:converter>
            <bean class="my.package.converters.DateTimeToDBObject" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

我没有尝试过:

<mongo:mapping-converter base-package="my.package.entities">
    <mongo:custom-converters>
        <mongo:converter base-package="my.package.converters.DBObjectToDateTime" />
    </mongo:custom-converters>
</mongo:mapping-converter>

会注册所有转换器。它似乎没有意义,如果正确实施,维护者的建议会更好。