0

这是我第一次在 java 中使用 XML,我希望对我的代码有所帮助。我看不出我哪里错了。谢谢。

我想做的是了解 Spring 框架。

这是代码:

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

Controller contr = (Controller) factory.getBean("application"); 您不能将 LearnXML 对象类型转换为 Controller 对象

试试这个。LearnXML learnXml= (LearnXML) factory.getBean("application"); learnXml.getController().PrintName();

于 2012-12-25T15:39:30.137 回答
1

在下面的行中更改您的代码

LearnXML learnXML= (LearnXML) factory.getBean("application");

于 2012-12-25T15:43:25.077 回答