11

也许是因为我的英文错误,我无法理解使用@Autowired 注解的好处。

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

我的问题是,@Autowired 的含义是什么?因为它不再说明,因为不使用@Autowired,编译器可以根据声明找出“EmpDao emDao”和“EmpManager”密切相关。

从这里引用的代码

我。

    <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;

}
4

4 回答 4

11

@Autowired是特定于弹簧的。@Inject是标准等价物。它是一个注释,它告诉上下文(spring,或者在@Inject任何 DI 框架的情况下)尝试将对象设置到该字段中。

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

我同意 DI 框架可能会尝试将依赖项注入所有字段,即使它们没有注释。(如果您想排除特定字段,请对其进行注释)。但他们选择了另一种策略(配置优于约定)。顺便一提:

  • 如果使用 xml 配置并选择某种形式的自动装配,bean 的依赖项将自动自动装配,无需指定任何内容
  • 您可以指定每个上下文的自动装配设置。
于 2011-02-14T22:10:26.697 回答
1

@Autowired Spring 注释告诉 Spring 为一个名为“empDao”的 bean 并将其注入到 EmpManager 类中,而无需将 empDao bean 作为属性添加到 spring 配置文件中。

于 2011-02-14T22:13:44.590 回答
1

当服务器自行引导时。它发现

 <context:annotation-config />

在应用程序上下文中,然后遍历上下文中定义的类。如果有任何 bean 是自动装配的,它会通过引用上下文文件将其注入到类中。

基本上,它提倡约定优于配置。这就是当今大多数框架为减少开发时间所做的事情。

于 2011-02-14T22:13:13.637 回答
0

@Autowired 告诉 Spring 查找声明类型的 bean 并在该 bean 中连接,而不需要通过 bean 名称进行显式查找。在某些情况下,如果您在给定的 Spring 上下文中只有一个类型的实现,它可以使配置应用程序更容易。

于 2011-02-14T22:12:03.123 回答