如何在 ApplicationContext.xml 中定义一个没有构造函数的 bean?
Posted
技术标签:
【中文标题】如何在 ApplicationContext.xml 中定义一个没有构造函数的 bean?【英文标题】:How to define a bean in ApplicationContext.xml that has no constructor? 【发布时间】:2020-03-18 06:40:17 【问题描述】:我有课
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>
【问题讨论】:
解决方案:使用property
,这里使用constructor-arg
(docs.spring.io/spring-javaconfig/docs/1.0.0.m3/reference/html/…)
您可以使用 假设,您有公共(您的 getter 和 setter)属性,并且只有“默认(无 args)构造函数”,那么您可以将配置更改为:
<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
【讨论】:
【参考方案2】:是的,有一个构造函数。
如果你没有显式地放一个,Java 会自动添加一个默认的(非参数)构造函数。
使用那个。 它将所有实例变量设置为其类型的默认值。
在您的情况下:每个 String 变量都为 null,每个布尔值都为 false。
【讨论】:
但我需要在数据存储中设置字段 所以,要么添加构造函数,要么使用setter 我使用了 setter 和 used 属性。现在它的工作以上是关于如何在 ApplicationContext.xml 中定义一个没有构造函数的 bean?的主要内容,如果未能解决你的问题,请参考以下文章