Java 弹簧自动接线上的NullPointerException

Java 弹簧自动接线上的NullPointerException,java,spring,dependency-injection,Java,Spring,Dependency Injection,我编写了一个Spring自动布线的练习题,并获得了NullPointerException 这是我的代码 界面:形状 public interface Shape { public void draw(); } public class Triangle implements Shape{ private Point A; private Point B; private Point C; public Point getA() {

我编写了一个Spring自动布线的练习题,并获得了
NullPointerException

这是我的代码
界面:形状

public interface Shape {
    public void draw();
}
    public class Triangle implements Shape{

    private Point A;
    private Point B;
    private Point C;

    public Point getA() {
        return A;
    }

    public void setA(Point a) {
        A = a;
    }

    public Point getB() {
        return B;
    }

    public void setB(Point b) {
        B = b;
    }

    public Point getC() {
        return C;
    }

    public void setC(Point c) {
        C = c;
    }

    public void draw(){
        System.out.println("PointA("+ A.getX() + "," + A.getY() +")");
        System.out.println("PointB("+ B.getX() + "," + B.getY() +")");
        System.out.println("PointC("+ C.getX() + "," + C.getY() +")");
    }
}
类别:三角形

public interface Shape {
    public void draw();
}
    public class Triangle implements Shape{

    private Point A;
    private Point B;
    private Point C;

    public Point getA() {
        return A;
    }

    public void setA(Point a) {
        A = a;
    }

    public Point getB() {
        return B;
    }

    public void setB(Point b) {
        B = b;
    }

    public Point getC() {
        return C;
    }

    public void setC(Point c) {
        C = c;
    }

    public void draw(){
        System.out.println("PointA("+ A.getX() + "," + A.getY() +")");
        System.out.println("PointB("+ B.getX() + "," + B.getY() +")");
        System.out.println("PointC("+ C.getX() + "," + C.getY() +")");
    }
}
等级:分数

public class Point {

    private int x,y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

}
public class DrawingApp {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Shape triangle =(Shape) context.getBean("triangle");
        triangle.draw();

    }

}
SpringXML

<?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-3.0.xsd">

    <bean id="triangle" class="org.demo.javabrains.Triangle" autowire="byName">
    </bean>

    <bean id="A" class="org.demo.javabrains.Point">
        <property name="x" value="0"/>
        <property name="y" value="0"/>
    </bean>

    <bean id="B" class="org.demo.javabrains.Point">
        <property name="x" value="10"/>
        <property name="y" value="20"/>
    </bean>

    <bean id="C" class="org.demo.javabrains.Point">
        <property name="x" value="30"/>
        <property name="y" value="40"/>
    </bean>
</beans>
我不知道为什么我会在这件事上得到NullPointer异常 当我试图运行这段代码时,它抛出异常

INFO: Loading XML bean definitions from class path resource [spring.xml]
Exception in thread "main" java.lang.NullPointerException
    at org.demo.javabrains.Triangle.draw(Triangle.java:34)
    at org.demo.javabrains.DrawingApp.main(DrawingApp.java:16)

点A被赋值为null不知道为什么您的三角形。draw()方法使用点类对象。您已经在xml中声明了Point对象,但并没有使用它将其注入到三角bean定义中。这就是为什么它会给出null指针异常,因为它不是初始化的

SpringXML中的三角形bean定义应该如下

<bean id="triangle" class="org.demo.javabrains.Triangle" autowire="byName">
 <property name="A" ref="A"/>
 <property name="B" ref="B"/>
 <property name="B" ref="B"/>
</bean>

按属性名称使用自动布线时:


有关Spring中自动关联协作器的更详细讨论,请检查。

尝试不要在bean名称(第一个单词)中使用大写字母,也尝试不要设置以大写字母开头的对象变量,这将导致空指针异常

//These are the bean definitions
<bean name="MyClassA" id="Aclass" class="com.test.autowire.MyClassA" autowire="byName"></bean>
<bean name="bClass" id="bClass" class="com.test.autowire.MyClassB"></bean>



public class MyClassA {
private MyClassB bClass; 
//donot use BClass, use the first letter as lowercase eg: bClass

public MyClassB getbClass() {
    return bClass;
}

public void setbClass(MyClassB bClass) {
    this.bClass = bClass;
}

public void printInA(){
    bClass.print();
    bClass.disp();
}
}

public class MyClassB {
MyClassB(){
    System.out.println("THis is my Class B default Constrctr");
}
void print(){
    System.out.println("This is a print");
}
void disp(){
    System.out.println("This is disp methd");
}
}
//这些是bean定义
公共类MyClassA{
私有MyClassB B类;
//不要使用BClass,请将第一个字母用作小写字母,例如:BClass
公共MyClassB getbClass(){
返回b类;
}
公共类(MyClassB B B类){
this.bClass=bClass;
}
公共无效印刷品(){
b class.print();
b类disp();
}
}
公共类MyClassB{
MyClassB(){
System.out.println(“这是我的B类默认构造函数”);
}
作废打印(){
System.out.println(“这是一个打印”);
}
void disp(){
System.out.println(“这是显示方法”);
}
}

这是一个简单的打字错误:应该是