java - 如何修复 '' 创建名称在类路径资源中定义的 bean 时出错”?

标签 java spring inversion-of-control setter-injection

我参加了一个 bean 类(class),在这个类(class)中我参加了一个内部 bean。我已经在配置文件中配置了它们。但是,当我尝试运行 Java 应用程序时,它抛出异常,提示“创建类路径资源 [spconfig.xml] 中定义的名称为“id1”的 bean 时出错:设置属性值时出错;嵌套异常为 org.springframework.beans” .NotWritablePropertyException:bean 类 [SampleBean] 的无效属性“db”:Bean 属性“db”不可写或具有无效的 setter 方法。您是指“DB”吗?为什么我不受欢迎到inner bean?该怎么办?

配置文件中正确定义的属性。

SampleBean.java

public class SampleBean {

    private DemoBean db;

    public void setDB(DemoBean db) {
        this.db=db;
    }

    public void show() {
        db.m1();
    }
}
DemoBean.java

public class DemoBean {

    public void m1() {
        System.out.println("Welcome to inner bean");
    }
}

spconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
        "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

 <beans>
 <bean id="id1" class = "SampleBean">
 <property name="db">
 <bean class = "DemoBean"/>
 </property>
 </bean>
 </beans>

Client.java

import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.*;
import org.springframework.core.io.*;
public class Client {
    public static void main(String[] args) {


    Resource res = new ClassPathResource("spconfig.xml");
    @SuppressWarnings("deprecation")
    BeanFactory factory = new XmlBeanFactory(res);
    Object o = factory.getBean("id1");
    SampleBean sb = (SampleBean)o;
    sb.show();
    }

}


最佳答案

Spring 使用JavaBeans naming convention .

像这样的字段

private DemoBean db;

以及类似的声明

<property name="db">

Spring 需要一个名为 setDb 的 setter,而不是像代码中那样的 setDB。将其更改为 setDb 并且您的 main 方法将正确打印

Welcome to inner bean

关于java - 如何修复 '' 创建名称在类路径资源中定义的 bean 时出错”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56030796/

相关文章:

java - 如何使用 foreach 循环检测 ArrayList 中的字符串?

java - Spring Roo 的用户界面

java - spring-data-solr java.lang.IllegalArgumentException : Not a managed type

c# - 组合根与服务定位器

java - 什么时候实现 Iterator 而不是 Iterable 有用?

Java 控制台 readPassword() 返回无意义的字符

Android Gradle~如何添加Maven来获取Android Spring Security?

java - Spring 数据mongodb : How to define cursor limit in findAll method

c# - Ninject - 自动绑定(bind)从通用基类继承的程序集中的所有类(后者又实现通用接口(interface))

c# - Web API 自托管自定义 ioc 将数据注入(inject) Controller