0

Java で XML を使用するのはこれが初めてで、自分のコードについて支援が必要です。どこが間違っているのかわかりません。ありがとう。

私がやろうとしているのは、Spring Framework を理解することです。

コードは次のとおりです。

public class Student
{

    public Student(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    // VARIABLES DECLARATION
    private String name = null;
}

public class Controller
{
    public Controller(Student student)
    {
        this.student = student;
    }
    public void PrintName()
    {
        System.out.println(""+student.getName());
    }

    public Student getStudent()
    {
        return student;
    }

    public void setStudent(Student student)
    {
        this.student = student;
    }   
    // VARIABLES DECLARATION
    private Student student;
}



public class LearnXML
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        // TODO code application logic here
        ApplicationContext factory = new ClassPathXmlApplicationContext("Student.xml");
        Controller contr = (Controller) factory.getBean("application");
        contr.PrintName();
    }

    public void setController(Controller controller)
    {
        this.controller = controller;
    }   
    private Controller controller;
}

私のXMLファイル:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="student" class="domain.Student">
        <constructor-arg value="Ovidiu"   />
    </bean>
    <bean id="brain" class="controller.Controller">
        <constructor-arg ref="student"/>
    </bean>
    <bean id="application" class="learnxml.LearnXML">
        <property name="controller" ref="brain"/>   
    </bean>

</beans>

私のエラー:

    Dec 25, 2012 5:34:02 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@dd0099: startup date [Tue Dec 25 17:34:02 EET 2012]; root of context hierarchy
Dec 25, 2012 5:34:03 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Student.xml]
Dec 25, 2012 5:34:03 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5ceeb4a3: defining beans [student,brain,application]; root of factory hierarchy
Exception in thread "main" java.lang.ClassCastException: learnxml.LearnXML cannot be cast to controller.Controller
    at learnxml.LearnXML.main(LearnXML.java:25)
Java Result: 1
4

4 に答える 4

4

それはまさにそれが言うことを意味します:

learnxml.LearnXML cannot be cast to controller.Controller

あなたはLearnXMLオブジェクトを持っています:

<bean id="application" class="learnxml.LearnXML">
    <property name="controller" ref="brain"/>   
</bean>

Controllerそして、それをオブジェクトにキャストしようとしています:

Controller contr = (Controller) factory.getBean("application");

getBean()Object手元のタスクの固有の性質により、特定の型ではなく型を返しています。リフレクションを使用してxmlから任意のタイプをインスタンス化するため、コンパイル時にタイプが何であるかがわかりません。実行時にそれObjectを何かにキャストしようとすると、そうではありません...その例外が発生します。

編集して追加:

それが明らかでない場合は、あなたが本当にやりたいと思っているようです:

LearnXML lXML = (LearnXML) factory.getBean("application");
于 2012-12-25T15:40:17.920 に答える
1

あなたはここに来ていますfactory.getBean("application");

LearnXML タイプのオブジェクトですが、Controller にキャストしています

コントローラーを取得したい場合は、このように脳を使用します

Controller contr = (Controller) factory.getBean("brain");
于 2012-12-25T15:38:09.800 に答える
1

コントローラー contr = (コントローラー) factory.getBean("アプリケーション"); LearnXML オブジェクトを Controller オブジェクトに型キャストすることはできません

これを試して。LearnXML LearnXml= (LearnXML ) factory.getBean("アプリケーション"); learnXml.getController().PrintName();

于 2012-12-25T15:39:30.137 に答える
1

行の下のコードを変更します

LearnXML LearnXML= (LearnXML) factory.getBean("アプリケーション");

于 2012-12-25T15:43:25.077 に答える