Java中@Autowired注释的好处

csc*_*aba 11 java spring annotations autowired

也许,由于我的英语错误,我无法理解使用@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;
   }

   ...
}
Run Code Online (Sandbox Code Playgroud)

II.

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

}
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 11

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

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

我同意DI框架可能会尝试将依赖项注入所有字段,即使它们没有注释.(如果要排除特定字段,请对其进行注释).但是他们选择了另一种策略(配置超过惯例).顺便说说:

  • 如果使用xml配置并选择某种形式的自动装配,bean的依赖关系将自动自动装配,而无需指定任何内容
  • 您可以指定每个上下文的自动装配设置.