有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于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) 个答案

  1. # 1 楼答案

    在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