【问题标题】:Populating a spring bean using a constructor-arg field使用构造函数参数字段填充 Spring bean
【发布时间】:2011-03-28 20:13:57
【问题描述】:

如何使用该字段注入包含 Map 的属性文件以用作附加构造函数 arg。

从属性文件加载地图

bean 当前设置使用:

<bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
     init-method="enableRemoteShell" destroy-method="shutdown">

     <constructor-arg index="0" value= "data/neo4j-db"/>
         <constructor-arg index="1" value=?  />
</bean>

Java 等价物:

Map<String,String> configuration =  EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/neo4j-db", configuration );

谢谢

【问题讨论】:

    标签: java spring neo4j


    【解决方案1】:

    创建一个加载属性的 bean(并将文件名作为参数)并注入它。

    编辑当使用注解时,诸如构造函数注入之类的事情变得更加简单:

    @Bean
    public Map<String,String> configuration() {
        return EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
    }
    
    @Bean
    public GraphDatabaseService graphDb() {
        return new EmbeddedGraphDatabase( "data/neo4j-db", configuration() );
    }
    

    请注意,第二个 bean 定义方法“简单地”调用第一个。当这段代码被执行时,Spring 会做一些魔法,所以你仍然可以在其他地方覆盖 bean(即 bean 仍然相互覆盖),它会确保方法体只执行一次(不管它多久执行一次,从哪里执行)被调用)。

    如果配置在不同的@Configuration 类中,那么您可以@Autowired 它:

    @Autowired
    private Map<String,String> configuration;
    
    @Bean
    public GraphDatabaseService graphDb() {
        return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
    }
    

    【讨论】:

    【解决方案2】:

    类似这样的:

    <bean id="configuration" class="org.neo4j.kernel.EmbeddedGraphDatabase" 
          factory-method="loadConfigurations">
       <constructor-arg value="neo4j_config.props"/>
    </bean>
    
    <bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
         init-method="enableRemoteShell" destroy-method="shutdown">
    
         <constructor-arg index="0" value="data/neo4j-db"/>
         <constructor-arg index="1" ref="configuration"  />
    </bean>
    

    这利用了the ability to create beans using arbitrary static factory methods,在本例中使用loadConfigurations() 作为工厂方法来创建configuration bean,然后将其注入到EmbeddedGraphDatabase 的正确构造函数中。

    【讨论】:

    • 我也将此添加到Neo4j wiki,谢谢大家!
    • @skaffman +1 谢谢!!您能否也使用注释添加答案??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2019-03-10
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多