@autowired on Spring中的方法

Nis*_*hit 8 java spring annotations autowired

我正在学习Spring,据我了解,当我们在具有通用名称的方法(不是setter方法)上使用@annotation时,该方法的参数将自动装配。

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog mC,
            CustomerPreferenceDao cPD) {
        this.movieCatalog = mC;
        this.customerPreferenceDao = cPD;
    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

因此,在这里,将movieCatalogcustomerPreferenceDao字段与mCcPD的值自动关联。我无法理解的是,这与没有“ @autowired ” 的相同方法有何不同

当应用于字段名称时,我理解@autowired,但无法理解何时将值显式传递给方法(setter或任何其他方法),那么Spring有什么特别之处?

P.J*_*sch 10

答案很晚,但是这里是:

任何带有注释的方法@Autowired都是config方法。字段注入完成后,将在bean实例化上调用它。方法的参数会在调用时注入到方法中。

  • 我的问题是为什么我们用 @Autowired 注释一个方法?它的目的是什么? (2认同)
  • 这只是用`@ PostConstruct`注释方法的一种选择;用这些注释注释的方法在创建bean之后被调用,可用于初始化bean。@PostConstruct来自JavaEE,而@Autowired来自Spring。 (2认同)

i-t*_*tms 5

您提供的@autowired 方法不需要从您自己的代码中调用。它将被 Spring 框架调用。想象一个声明为@autowired 的类中的setter 方法。setters 参数由 Spring 提供。所以在使用类对象实例之前,你不必编写代码来调用setter方法,就像你不需要提供@autowired构造函数的参数一样。使用自动装配可以做很多事情。看看这两个例子:

调用@autowired 方法

@autowired 的其他用途

@autowired 的优点之一是您不必实例化对象,因为 Spring Framework 会为您完成。但不仅如此,@autowired 对象由 Spring 框架管理,因此您不必担心对象实例的处理,因为 Spring 会为您完成。因此它节省了大量用于跟踪和管理对象的编码和不必要的代码。希望这会有所帮助。


cpr*_*ger 1

方法上的 @autowired 用于setter-injection。它与现场注入没有什么不同,除了 bean 不太依赖于 spring 容器,您也可以自己实例化并连接它。

使用它的原因之一是如果您有循环依赖项。

setter 注入的另一个用途是它允许稍后重新注入(可能是可选的)依赖项 (JMX)。