2013-03-14 6 views
3

Я свежее, я недавно начал изучать Spring.In пружинная инъекция зависимостей, мы можем вводить bean-компонент двумя способами: конструктор, а другой - через метод setter. Вопрос в том, для каких ситуаций лучше встраивается инжектор конструктора и , для каких ситуаций лучше всего вводить метод установки. мой фокус только на том, где использовать? Приведите пример, если это возможно ... ожидая вашего ценного ответа., когда нужно впрыскивать конструктор и когда нужно впрыскивать параметр весной

+2

[Это] (HTTP:. // blog.springsource.com/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/) поможет вам ... :) –

+0

http: //misko.hevery. com/2009/02/19/constructor-injection-vs-setter-injection/ – Shashi

ответ

2

Существует третий способ: инъекция поля.

Вы можете использовать аннотацию @Resource, @Inject или @Autowire в (даже приватном) поле. Это поле даже не обязательно должно быть хеттером или сеттером.

Если вы создаете приложение Spring, и нет плана использования классов в приложении Spring или в библиотеке, тогда для инъекции поля достаточно для 90% классов. Я предпочитаю, потому что это меньше кода.

Конечно, если вы используете конструктор для обязательных ссылок, тогда нет способа забыть один из них при создании нового экземпляра. Но (и это моя точка зрения, которая отличается от Алефа Арендсена в его 3-летней записи блога Spring 2.0 «Setter injection versus constructor injection and the use of @Required"), у вас есть весенний боб, а не простой класс. И этот компонент создан весной, а не непосредственно вами . Так что, если вы используете @Resource, @Inject или @Autowire для полей или сеттер пружина проверяет их тоже и не ставьте компонент и все приложения в обслуживании, если не все ссылки могут быть удовлетворены

+0

Интересно, как бы вы выполняли модульный тест с @Inject в частном поле. –

+0

@ denis.solonenk Я использую Util, который создает mocks и вводит их для всех полей, помеченных '@ Resource',' @ Inject', '@ Autowire' данного объекта. - Этот инструмент предназначен для open source, к сожалению, я не нашел времени для его публикации. – Ralph

2

Я бы сказал, зайдите за constructor injection.

В некоторых случаях для setter injection, если зависимость не является обязательной.

Если вы вынуждены использовать установку утилизатора и использовать пружину, используйте @Required, чтобы попросить Весну обеспечить ее соблюдение.

Применить здравый смысл во всех случаях:

+0

спасибо за ваш ответ –

+0

@Arun согласен с этим ответом, если это то, о чем вы просили. – nav0611

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