基于java XML上下文的bean无法执行构造函数注入:未找到默认构造函数
我正在学习Spring框架(没有Spring Boot,为了理解它在引擎盖下是如何工作的)
我在applicationContext中定义了这个bean。xml文件:
<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
<property name="XMLJdbcConnection" ref="connectionXML" />
</bean>
这是我的刀课:
public class XmlBasedDAO {
private XMLJdbcConnection XMLJdbcConnection;
public XMLJdbcConnection getXMLJdbcConnection() {
return XMLJdbcConnection;
}
public void setXMLJdbcConnection(XMLJdbcConnection XMLJdbcConnection) {
this.XMLJdbcConnection = XMLJdbcConnection;
}
}
这是我的ConnectionXML类:
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.
为什么我不能用这种配置在类中定义构造函数?为什么仅仅是塞特注射就能奏效
我也读了很多问题和文件,但我没有找到这个具体案例的答案
# 1 楼答案
在Spring中,您可以使用构造函数注入或Setter注入来执行DI
<constructor-arg>
标记用于构造函数注入<property>
标记用于setter注入如果您没有更改用于构造函数注入的xml,可以执行以下操作:
你可以看看这个tutorial