سؤال

كيف يمكنني حقن ملف الخصائص الذي يحتوي على خريطة لاستخدامها كمنشئ إضافي باستخدام الحقل.

مع تحميل خريطة من ملف الخصائص

الحبة حاليا الإعداد باستخدام:

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

ما يعادل جافا:

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

شكرًا

هل كانت مفيدة؟

المحلول

شيء من هذا القبيل:

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

هذا يستفيد من القدرة على إنشاء الفاصوليا باستخدام أساليب المصنع الثابت التعسفي, ، في هذه الحالة باستخدام loadConfigurations() كطريقة مصنع لإنشاء configuration الفاصوليا ، التي يتم حقنها بعد ذلك في مُنشئ EmbeddedGraphDatabase.

نصائح أخرى

قم بإنشاء فول يقوم بتحميل الخصائص (ويأخذ اسم الملف كوسيطة) وحقن ذلك بدلاً من ذلك.

تعديل عند استخدام التعليقات التوضيحية ، تصبح أشياء مثل حقن المنشئ أكثر بساطة:

@Bean
public Map<String,String> configuration() {
    return EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
}

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration() );
}

لاحظ أن طريقة تعريف الفول الثانية "ببساطة" تستدعي الأول. عندما يتم تنفيذ هذا الرمز ، سيفعل Spring بعض السحر حتى لا يزال بإمكانك تجاوز الفاصوليا في مكان آخر (أي الفاصوليا لا تزال تكتب بعضها البعض) وسيتأكد من تنفيذ هيئة الطريقة مرة واحدة فقط (بغض النظر عن عدد المرات ومن أين ومن أين. كان يسمى).

إذا كان التكوين في حالة مختلفة @Configuration الفصل ، ثم يمكنك @Autowired هو - هي:

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top