当前位置: 首页 > 知识库问答 >
问题:

基于XML上下文的bean无法执行构造函数注入:未找到默认构造函数

屠德宇
2023-03-14

我正在学习Spring框架(没有Spring Boot,为了了解它在头套下是如何工作的)。

    <bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
    <bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
        <property name="XMLJdbcConnection" ref="connectionXML" />
    </bean>

这是我的DAO类:

    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();
    }
    public class XmlBasedDAO {

        private XMLJdbcConnection XMLJdbcConnection;

        public XmlBasedDAO(XMLJdbcConnection XMLJdbcConnection) {
            this.XMLJdbcConnection = XMLJdbcConnection;
        }

        public XMLJdbcConnection getXMLJdbcConnection() {
            return XMLJdbcConnection;
        }
    
}

嵌套异常为org.SpringFramework.Beans.BeanInstantiationException:无法实例化[com.SpringLearning.XMLBasedDAO]:未找到默认构造函数;嵌套的异常是java.lang.NosuchMethodException:com.SpringLearning.XMLBasedDAO。

为什么我不能用这种配置在我的类中定义一个构造函数?为什么只是一个塞特注射会起作用?

我读了很多问题和文件,但我没有找到一个具体的案例的答案。

共有1个答案

夹谷沛
2023-03-14

在Spring中,您可以使用构造函数注入或Setter注入来执行DI。

标记用于构造函数注入

标记用于setter注入

您不需要为构造函数注入更改xml,您可以这样做:

<bean id="connectionXML" class="com.springLearning.ConnectionXML"/>
<bean id="xmlBasedDAO" class="com.springLearning.XmlBasedDAO">
    <constructor-arg>
     <ref bean="connectionXML"/> 
    </constructor-arg>  
</bean>

您可以查看本教程

 类似资料:
  • Spring靴和jpa给出了错误 项目的github链接https://github.com/dishankgoyal/springsBoot/tree/master/faculty_project

  • 为什么: 如果一个类不提供任何然后在编译时由编译器给出,但是如果一个类包含,那么默认构造函数不是由编译器提供。 我正在编译下面的代码。它给出了编译错误。 代码: 控制台错误: 当我只调用。工作正常。但是当您想使用参数化构造函数调用

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 我想把它转换成这样的东西: 这将使类不可变并且更容易进行单元测试。问题是,由于executorService需要通过@Resource注释获得,它似乎不能通过构造函数注入。

  • 因此,我有了类、、和。由于类有很多setter和getter,所以我决定将代码放在pastebin中: LogBookEntry 驱动程序 数据库 汽车 因此,正如您在数据库中所看到的,我有两个函数来加载和保存XML数据。 如您所见,类的日期不会保存到XML文件中。这就是为什么我在加载xml文件时会出现以下错误的原因: Okt 22,2017 3:36:33 PM com.sun.xml.inte

  • 问题内容: 有没有一种方法可以用XML编写Spring bean,以便在构造函数具有varargs参数类型时使用构造函数注入?IE,有没有一种方法可以指定数组,也可以指定列表? 例如: 问题答案: 因为是您可以使用的数组: