将@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时具有灵活性(尽管我不会这样做)。

08-28 17:42