如何使用spring创建和配置内部构建器类



我正在尝试对以下代码片段进行弹性化:

MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
DB db = mongoClient.getDB("jcr");
DocumentNodeStore ns = new DocumentMK.Builder().setMongoDB(db)
                .getNodeStore();
Repository repo = new Jcr(new Oak(ns)).createRepository();

摘自Oak网站:http://jackrabbit.apache.org/oak/docs/construct.html

问题线是:

DocumentNodeStore ns = new DocumentMK.Builder().setMongoDB(db)
                .getNodeStore();

以下是我如何在xml:中配置它

<bean id="builder" class="org.apache.jackrabbit.oak.plugins.document.DocumentMK$Builder">   
        </bean>
<bean factory-bean="builder" factory-method="setMongoDB" >
       <constructor-arg name="db" value="#{mongoDbTags.getDb()}"/>
</bean>

我已经配置了一个SimpleMongoDbFactory,并通过工厂方法获得了要注入到调用setMethod的构建器bean中的数据库。

请注意,它不作为生成器类下的属性存在,但该方法确实存在。

这是我的配置文件:

    <bean id="mongo" class="com.mongodb.MongoClient">
        <constructor-arg name="host" value="localhost" />
        <constructor-arg name="port" value="27017" />
    </bean>
        <bean id="mongoDbTags" class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
            <constructor-arg name="mongo" ref="mongo" />
            <constructor-arg name="databaseName" value="jcr111" />
        </bean>
    <bean id="builder" class="org.apache.jackrabbit.oak.plugins.document.DocumentMK$Builder">   
    </bean>
        <bean factory-bean="builder" factory-method="setMongoDB" >
             <constructor-arg name="db" value="#{mongoDbTags.getDb()}"/>
          </bean>
    <bean id="documentMK" class="org.apache.jackrabbit.oak.plugins.document.DocumentMK">
    <constructor-arg name="builder" ref="builder" />
    </bean>
    <bean id="oak" class="org.apache.jackrabbit.oak.Oak">
        <constructor-arg name="store" value="#{builder.getNodeStore()}" />
    </bean>
    <bean id="jcr" class="org.apache.jackrabbit.oak.jcr.Jcr">
        <constructor-arg name="oak" ref="oak" />
    </bean>
        <bean id="jcrSessionFactory"
            class="org.springframework.extensions.jcr.JcrSessionFactory">
            <property name="repository"  value="#{jcr.createRepository()}" />
            <property name="credentials">
  <bean class="javax.jcr.SimpleCredentials">
                    <constructor-arg index="0" value="admin" />
                    <constructor-arg index="1" value="admin" />
                </bean>
            </property>
        </bean>
        <bean id="jcrTemplate" class="org.springframework.extensions.jcr.JcrTemplate">
            <property name="sessionFactory" ref="jcrSessionFactory" />
            <property name="allowCreate" value="true" />
        </bean>

对于其他陷入困境的人,我只创建了一个包装类,从其构造函数中调用构建器

最新更新