ملء حبة زنبركية باستخدام حقل مُنشئ
سؤال
كيف يمكنني حقن ملف الخصائص الذي يحتوي على خريطة لاستخدامها كمنشئ إضافي باستخدام الحقل.
مع تحميل خريطة من ملف الخصائص
الحبة حاليا الإعداد باستخدام:
<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 );
}