Как определить bean-компонент в ApplicationContext. xml, у которого нет конструктора? - PullRequest
1 голос
/ 18 марта 2020

У меня есть класс

public class DataStore {
    public String name;
    public String username;
    public String password;
    public String token;
    public String connectionString;
    public String type;
    public String scheme;

    public boolean usesBasicAuth;
    public boolean usesBearerAuth;
}

Мне нужно создать компонент для него в другом проекте. Но мне нужно как-то заполнить поля. Проблема в том, что я не могу использовать <constructor-arg ... />, потому что нет конструктора.

Приведенный ниже код приводит к исключению BeanCreationException: «Не удалось разрешить соответствующий конструктор»

 <bean id="dataStore"
      class="com.fressnapf.sdk.dataaccess.services.DataStore">
    <constructor-arg index="0" value="${spring.datastore.name}"/>
    ...
</bean>

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Если у вас есть свойства publi c (для ваших методов получения и установки) и только конструктор "по умолчанию (без аргументов)", тогда вы можете изменить свою конфигурацию на:

<bean id="dataStore" class="com.fressnapf.sdk.dataaccess.services.DataStore">
  <property name="connectionString" value="..."/>
  <!-- ... -->
</bean>

Использование property вместо constructor-arg.

Документы (весна 4.2): https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html

0 голосов
/ 18 марта 2020

Да, есть конструктор.

Если вы не укажете его явно, Java автоматически добавит конструктор по умолчанию (без аргументов).

Используйте его. Для всех переменных экземпляра будет установлено значение по умолчанию их типа.

В вашем случае: null для каждой строковой переменной, false для каждого логического значения.

...