Как исправить «Ошибка создания бина с именем, определенным в ресурсе пути к классу»? - PullRequest
0 голосов
/ 08 мая 2019

Я взял класс бобов, и в этом классе я взял внутренний боб. Я настроил их обоих в файле конфигурации. Но когда я пытаюсь запустить свое Java-приложение, оно выдает мне исключение, говорящее «Ошибка создания bean-компонента с именем 'id1', определенным в ресурсе пути к классу [spconfig.xml]: Ошибка при установке значений свойства; вложенное исключение - org.springframework.beans .NotWritablePropertyException: недопустимое свойство 'db' класса бина [SampleBean]: свойство бина 'db' недоступно для записи или имеет недопустимый метод установки. Вы имели в виду 'DB'? " почему меня не приветствуют внутренние бобы? что делать?

Свойство определено правильно в файле конфигурации.

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();
    }

}


1 Ответ

0 голосов
/ 08 мая 2019

Spring использует соглашение об именах JavaBeans .

С полем типа

private DemoBean db;

и декларация типа

<property name="db">

Spring ожидает установщик с именем setDb, а не setDB, как у вас в коде. Измените его на setDb, и ваш метод main будет правильно печатать

Welcome to inner bean
...