Заполнение весеннего боба с использованием поля конструктора-ARG

StackOverflow https://stackoverflow.com/questions/3466437

  •  28-09-2019
  •  | 
  •  

Вопрос

Как я могу ввести файл свойств, содержащий карту, которая будет использоваться в качестве дополнительного конструктора Arg, используя поле.

С картой, загруженной из файла свойств

Фасоль в настоящее время настроен с использованием:

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

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() );
}

Обратите внимание, что второй метод определения бобов «просто» вызывает первый. Когда этот код выполнен, пружина будет делать некоторую магию, чтобы вы все еще можете переопределить боб в другом месте (то есть бобы все еще перезаписывают друг друга), и он убедит, что корпус метода будет выполнен только один раз (независимо от того, как часто и откуда его выполнено назывался).

Если конфигурация находится в другом @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