将@Autowired注释到属性或在 setter 中进行注释有什么区别?
据我所知,它们都具有相同的结果,但是是否有任何理由要使用一个?
更新(更简洁)
两者之间有区别吗
package com.tutorialspoint;
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
private SpellChecker spellChecker;
@Autowired
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
和这个
package com.tutorialspoint;
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public TextEditor() {
System.out.println("Inside TextEditor constructor." );
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}
最佳答案
使用@Autowired
批注,您不需要setter方法。一旦您的bean的构造函数完成了分配/创建对象的工作,Spring就会扫描该注释并注入(inject)您注释的对象实例。
如果您有setter且仍在使用xml config,则可以显式设置属性。
话虽如此,您可以使用 Autowiring 注释来注释构造函数和setter方法,我希望这样做是可行的,因为这将使我在以后离开Spring时具有灵活性(尽管我不会这样做)。