如何在 ApplicationContext.xml 中定义一个没有构造函数的 bean?

How to define a bean in ApplicationContext.xml that has no constructor?

我有一个class

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

我需要在另一个项目中为它创建一个bean。但我需要以某种方式填写字段。问题是我不能使用 <constructor-arg ... /> 因为没有构造函数。

下面的代码导致 BeanCreationException:"Could not resolve matching constructor"

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

是的,有一个构造函数。

如果您不显式添加一个,Java 将自动添加一个默认(非参数)构造函数。

用那个。 它会将所有实例变量设置为其类型的默认值。

在您的情况下:每个字符串变量为 null,每个布尔值为 false。

假设,您有 public(您的 getter 和 setter)属性,并且只有 "default (no args) constructor",那么您可以将配置更改为:

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

使用 property 代替 constructor-arg

文档 (Spring 4.2): https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html