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

时间:2015-04-03 02:07:51

标签: java 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并获取要注入到构建器bean中的数据库,通过工厂方法调用setMethod。

请注意,这不作为构建器类下的属性存在,但该方法确实存在。

这是我的配置文件:

    <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>

1 个答案:

答案 0 :(得分:0)

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