Преимущество @Autowired аннотации в Java

Возможно, из-за моего неправильного английского языка я не мог понять преимущества использования @Autowired аннотации.

В соответствии с учебным пособием мы можем упростить первый (I.) случай ко второму случаю (II.) с помощью @Autowired.

Мой вопрос: в чем смысл @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;
   }

   ...
}

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;

}

Ответ 1

@Autowired является spring -специфическим. @Inject является стандартным эквивалентом. Это аннотация, которая сообщает контексту (spring, или в случае @Inject - любой каркас DI), чтобы попытаться установить объект в это поле.

Компилятор не имеет к этому никакого отношения - это среда DI (spring), которая создает экземпляры ваших объектов во время выполнения, а затем устанавливает их зависимости в указанных вами точках - либо через XML, либо через аннотацию.

Я согласен, что возможный сценарий для среды DI должен попытаться ввести зависимости во все поля, даже если они не аннотируются. (И если вы хотите исключить конкретное поле, аннотировать его). Но они выбрали другую стратегию (конфигурация по сравнению с конвенцией). Кстати:

  • если вы используете конфигурацию xml и выбираете какую-либо форму автосогласования, зависимости bean будут автоматически автоматизированы без необходимости указывать что-либо.
  • вы можете указать настройки автоувеличивания для каждого контекста.

Ответ 2

Когда сервер загружается сам. Он находит

 <context:annotation-config />

в контексте приложения, а затем проходит через классы, определенные в контекстах. Если есть beans, которые были автоматически добавлены, он вводит это в класс, ссылаясь на файл контекста.

В принципе, это способствует согласованию конфигурации. Это то, что большинство фреймворков делает в наши дни, чтобы сократить время разработки.

Ответ 3

аннотация @Autowired Spring сообщает Spring для bean с именем 'empDao' и вводит его в класс EmpManager, без необходимости добавлять empDao bean в качестве свойства в Spring config.

Ответ 4

@Autowired сообщает Spring найти bean объявленного типа и проводника в bean, вместо того, чтобы требовать явного поиска по имени bean. Он может при определенных обстоятельствах упростить настройку приложений, если у вас есть только одна реализация ваших типов в данном контексте Spring.