答案 0 :(得分:1)
当您使用按物业名称自动装配时:
<bean id="triangle" class="org.demo.javabrains.Triangle" autowire="byName" />
Spring查找与需要自动装配的属性同名的bean。例如,如果bean定义设置为autowire byName
,并且它包含名为a
的属性,即它具有setA(..)
方法(不要与名为{{的字段混淆) 1}}),Spring查找名为A
的bean定义,并使用它来设置属性。
正如@Tunaki在评论中正确指出的那样,您将属性名称与字段本身的名称混淆为a
。无论如何,如果你使用A
bean的小写名称,你会没事的:
Point
有关在Spring中自动装配协作者的更详细讨论,请查看https://yoursite.com。
答案 1 :(得分:0)
Triangle .draw()方法使用Point类对象。您已在xml中声明了Point对象,但没有使用它来注入三角形bean定义。这就是它给出空指针异常的原因,因为它没有初始化。
Spring XML中的三角形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>
答案 2 :(得分:0)
尽量不要将大写字母用于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");
}
}