XML 基于上下文的 bean 无法执行构造函数注入:未找到默认构造函数
XML Context based bean cannot perform constructor injection : No default constructor found
我正在学习 Spring 框架(没有 Spring 引导,以便了解它是如何在引擎盖下工作的)。
我在 applicationContext.xml 文件中定义了这个 beans:
<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
<property name="XMLJdbcConnection" ref="connectionXML" />
</bean>
这是我的 DAO class:
public class XmlBasedDAO {
private XMLJdbcConnection XMLJdbcConnection;
public XMLJdbcConnection getXMLJdbcConnection() {
return XMLJdbcConnection;
}
public void setXMLJdbcConnection(XMLJdbcConnection XMLJdbcConnection) {
this.XMLJdbcConnection = XMLJdbcConnection;
}
}
这是我的 ConnectionXML class:
public class ConnectionXML implements XMLJdbcConnection {
@Override
public void connect() {
System.out.println("Connected");
}
}
它实现了这个接口:
public interface XMLJdbcConnection {
void connect();
}
现在使用 setter 注入(如上所示),一切正常。
但这就是问题所在:如果我像这样切换到定义的构造函数注入:
public class XmlBasedDAO {
private XMLJdbcConnection XMLJdbcConnection;
public XmlBasedDAO(XMLJdbcConnection XMLJdbcConnection) {
this.XMLJdbcConnection = XMLJdbcConnection;
}
public XMLJdbcConnection getXMLJdbcConnection() {
return XMLJdbcConnection;
}
}
我遇到了这个异常:
Error creating bean with name 'xmlBasedDAO' defined in class path
resource [applicationContext.xml]: Instantiation of bean failed;
nested exception is
org.springframework.beans.BeanInstantiationException: Failed to
instantiate [com.springLearning.XmlBasedDAO]: No default constructor
found; nested exception is java.lang.NoSuchMethodException:
com.springLearning.XmlBasedDAO.
为什么我不能用这个配置在 class 中定义构造函数?为什么只需要 setter 注射就能起作用?
我也阅读了很多问题和文档,但我没有找到针对这个特定案例的答案。
在 Spring 中,您可以使用构造函数注入或 Setter 注入来执行 DI。
<constructor-arg>
标签用于构造函数注入
<property>
标签用于setter注入
您没有更改构造函数注入的 xml,您可以这样做:
<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
<constructor-arg>
<ref bean="connectionXML"/>
</constructor-arg>
</bean>
你可以看看这个tutorial
我正在学习 Spring 框架(没有 Spring 引导,以便了解它是如何在引擎盖下工作的)。
我在 applicationContext.xml 文件中定义了这个 beans:
<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
<property name="XMLJdbcConnection" ref="connectionXML" />
</bean>
这是我的 DAO class:
public class XmlBasedDAO {
private XMLJdbcConnection XMLJdbcConnection;
public XMLJdbcConnection getXMLJdbcConnection() {
return XMLJdbcConnection;
}
public void setXMLJdbcConnection(XMLJdbcConnection XMLJdbcConnection) {
this.XMLJdbcConnection = XMLJdbcConnection;
}
}
这是我的 ConnectionXML class:
public class ConnectionXML implements XMLJdbcConnection {
@Override
public void connect() {
System.out.println("Connected");
}
}
它实现了这个接口:
public interface XMLJdbcConnection {
void connect();
}
现在使用 setter 注入(如上所示),一切正常。
但这就是问题所在:如果我像这样切换到定义的构造函数注入:
public class XmlBasedDAO {
private XMLJdbcConnection XMLJdbcConnection;
public XmlBasedDAO(XMLJdbcConnection XMLJdbcConnection) {
this.XMLJdbcConnection = XMLJdbcConnection;
}
public XMLJdbcConnection getXMLJdbcConnection() {
return XMLJdbcConnection;
}
}
我遇到了这个异常:
Error creating bean with name 'xmlBasedDAO' defined in class path resource [applicationContext.xml]: Instantiation of bean failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.springLearning.XmlBasedDAO]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.springLearning.XmlBasedDAO.
为什么我不能用这个配置在 class 中定义构造函数?为什么只需要 setter 注射就能起作用?
我也阅读了很多问题和文档,但我没有找到针对这个特定案例的答案。
在 Spring 中,您可以使用构造函数注入或 Setter 注入来执行 DI。
<constructor-arg>
标签用于构造函数注入
<property>
标签用于setter注入
您没有更改构造函数注入的 xml,您可以这样做:
<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
<constructor-arg>
<ref bean="connectionXML"/>
</constructor-arg>
</bean>
你可以看看这个tutorial