2015-09-30 3 views
-1

У меня есть вопрос, который прослушивает меня в течение некоторого времени, и поскольку я не смог найти ясный ответ, я решил задать его здесь.Использует @Autowired считается хорошей практикой?

Используется @Autowired считается хорошей практикой? Другими словами, имеет ли смысл использовать autowiring для производственного кода, или я должен рассматривать его как нечто, что «приятно иметь» для легких проектов, но не для «серьезного бизнеса»? Или это просто вопрос мнения?

У меня всегда было ощущение, что разработчик autowiring в принципе отказывается от предоставления «явного» набора правил впрыска и полагается на фреймворк, чтобы делать это правильно. Я могу казаться консервативным, но это не похоже на хорошее дизайнерское решение для меня.

+2

В обоих направлениях имеется миллион аргументов, что означает, что это в значительной степени вопрос личных предпочтений. Я предлагаю [Googling it] (https://www.google.com/search?q=annotation+vs+xml&ie=utf-8&oe=utf-8), чтобы получить больше перспективы, поскольку StackOverflow обычно не хочет отвечать на мнения, основанные на вопросах. – Keith

+0

Как еще вы можете получить экземпляр зависимой службы? Вызов конструктора? Вызовите фабричный метод? Вызовите JNDI/ServiceLocator? Ни один из них не является легко проверяемым, и никто из них не поддерживает насмехание эффективно. Кроме того, сыворотка, если бы я позволил коду, чтобы найти зависимости «загрязнять» мои бизнес-логики? –

ответ

1

Нет ничего плохого в использовании аннотации @Autowired в производственном коде.

Вы можете управлять инъекцией с помощью ApplicationContext, а также некоторых свойств самой аннотации (например, обязательно). Таким образом, разработчик, безусловно, не «отказывается» от контроля того, как вещи вводятся.

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

0

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

Я могу звучать консервативно, но это не похоже на хороший дизайн решение для меня.

Я бы сказал, что реализация вашего собственного каркаса DI - это худшее дизайнерское решение!

Убедитесь, что вы всегда используете инъекцию конструктора с @Autowired. Я бы сказал, что автоматическая проводка на уровне поля действительно подходит только для тестовых зависимостей. Также я бы обычно использовал JSR-330 @Inject, а не @Autowired.

Смежные вопросы