Spring autowire byNameが期待どおりに動作しません。Spring autowire byNameが期待通りに機能しない
public class SpellChecker {
public SpellChecker() {
System.out.println("Inside SpellChecker constructor.");
}
public void checkSpelling() {
System.out.println("Inside checkSpelling.");
}
}
public class TextEditor {
private SpellChecker spellChecker1;
private String name;
public void setSpellChecker(SpellChecker spellChecker1){
this.spellChecker1 = spellChecker1;
}
public SpellChecker getSpellChecker() {
return spellChecker1;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void spellCheck() {
System.out.println(" TextEditor name is " +name);
spellChecker1.checkSpelling();
}
}
public class TextEditorMain {
public static void main(String args[]) throws InterruptedException{
ApplicationContext context = new
ClassPathXmlApplicationContext("Beans.xml");
TextEditor tEditor = (TextEditor) context.getBean("textEditor");
tEditor.spellCheck();
}
}
のSpring Beanの設定:私は豆のIDとしてspellChecker1
与えるとき
<bean id = "spellChecker1" class = "com.spring.beans.SpellChecker">
</bean>
<bean id = "textEditor" class = "com.spring.beans.TextEditor" autowire="byName">
<property name = "name" value = "text1"/>
</bean>
それが機能していません。以下は
Inside SpellChecker constructor.
TextEditor name is text1
Exception in thread "main" java.lang.NullPointerException
at com.spring.beans.TextEditor.spellCheck(TextEditor.java:26)
at com.spring.main.TextEditorMain.main(TextEditorMain.java:15)
はビーンIDと参照名の両方が同じ
spellChecker1
が、まだ働いていない、コンソールO/Pです。私は
spellChecker1
を使用していたときに、依存関係が追加されていない理由しかし、奇妙なことがそう
Inside SpellChecker constructor.
TextEditor name is text1
Inside checkSpelling.
、私はspellChecker1
からspellChecker
にXMLで豆のIDを変更した場合、コードが動作し、O/Pの下に与えているのですか?
依存関係を宣言していないため、あなたはセッターを作成しました。 –
**フィールド**の名前は**プロパティ**の名前と同じではないためプロパティ名は、フィールドの名前ではなく、クラスのget/setメソッドによって定義されるため、プロパティ名は 'spellChecker'となります(これはSpringとは関係ありませんが、Java Bean仕様の動作/定義方法です)。だから実際には期待どおりに働いています。 –