Java 弹簧自动接线上的NullPointerException
我编写了一个Spring自动布线的练习题,并获得了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() {
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(“这是显示方法”);
}
}
这是一个简单的打字错误:应该是