Преимущество аннотации @Autowired в Java - PullRequest
11 голосов
/ 15 февраля 2011

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

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

У меня вопрос, что означает @Autowired?Поскольку это больше не говорит, так как без использования @Autowired компилятор может выяснить, что «EmpDao emDao» и «EmpManager» тесно связаны в соответствии с объявлением.1010 *

I.

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

}

Ответы [ 4 ]

11 голосов
/ 15 февраля 2011

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

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

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

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

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

1 голос
/ 15 февраля 2011

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

 <context:annotation-config />

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

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

0 голосов
/ 15 февраля 2011

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

...