也许是因为我的英文不对,所以我无法理解使用@Autowired注释的好处。

根据教程,我们可以通过@Autowired将第一种情况简化为第二种情况。

我的问题是@Autowired是什么意思?因为它不再显示任何内容,所以由于不使用@Autowired,编译器可以根据声明声明“EmpDao emDao”和“EmpManager”是紧密相关的。

here引用的代码

一世。

    <bean id="empDao" class="EmpDao" />
    <bean id="empManager" class="EmpManager">
       <property name="empDao" ref="empDao" />
    </bean>

public class EmpManager {

   private EmpDao empDao;

   public EmpDao getEmpDao() {
      return empDao;
   }

   public void setEmpDao(EmpDao empDao) {
      this.empDao = empDao;
   }

   ...
}

二。
<context:annotation-config />

<bean id="empManager" class="autowiredexample.EmpManager" />
<bean id="empDao"     class="autowiredexample.EmpDao" />

import org.springframework.beans.factory.annotation.Autowired;

public class EmpManager {

   @Autowired
   private EmpDao empDao;

}

最佳答案

@Autowired是特定于 Spring 的。 @Inject是标准的等效项。它是一个注释,告诉上下文( Spring ,或在@Inject的情况下-任何DI框架)尝试将对象设置为该字段。

编译器与此无关,它是DI框架( Spring )在运行时实例化您的对象,然后通过XML或批注将它们的依赖项设置在您指定的位置。

我同意DI框架尝试将依赖项注入(inject)所有字段(即使未添加注释)也是可能的情况。 (如果要排除特定字段,请对其进行注释)。但是他们选择了另一种策略(常规配置)。顺便一提:

  • 如果使用xml config并选择某种形式的 Autowiring ,则Bean的依赖项将自动进行 Autowiring ,而无需指定任何
  • 您可以指定基于上下文的 Autowiring 设置。
  • 关于java - Java中@Autowired注释的好处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4997836/

    10-10 23:08