Я свежее, я недавно начал изучать Spring.In пружинная инъекция зависимостей, мы можем вводить bean-компонент двумя способами: конструктор, а другой - через метод setter. Вопрос в том, для каких ситуаций лучше встраивается инжектор конструктора и , для каких ситуаций лучше всего вводить метод установки. мой фокус только на том, где использовать? Приведите пример, если это возможно ... ожидая вашего ценного ответа., когда нужно впрыскивать конструктор и когда нужно впрыскивать параметр весной
ответ
Существует третий способ: инъекция поля.
Вы можете использовать аннотацию @Resource
, @Inject
или @Autowire
в (даже приватном) поле. Это поле даже не обязательно должно быть хеттером или сеттером.
Если вы создаете приложение Spring, и нет плана использования классов в приложении Spring или в библиотеке, тогда для инъекции поля достаточно для 90% классов. Я предпочитаю, потому что это меньше кода.
Конечно, если вы используете конструктор для обязательных ссылок, тогда нет способа забыть один из них при создании нового экземпляра. Но (и это моя точка зрения, которая отличается от Алефа Арендсена в его 3-летней записи блога Spring 2.0 «Setter injection versus constructor injection and the use of @Required"), у вас есть весенний боб, а не простой класс. И этот компонент создан весной, а не непосредственно вами . Так что, если вы используете @Resource
, @Inject
или @Autowire
для полей или сеттер пружина проверяет их тоже и не ставьте компонент и все приложения в обслуживании, если не все ссылки могут быть удовлетворены
Интересно, как бы вы выполняли модульный тест с @Inject в частном поле. –
@ denis.solonenk Я использую Util, который создает mocks и вводит их для всех полей, помеченных '@ Resource',' @ Inject', '@ Autowire' данного объекта. - Этот инструмент предназначен для open source, к сожалению, я не нашел времени для его публикации. – Ralph
Я бы сказал, зайдите за constructor injection
.
В некоторых случаях для setter injection
, если зависимость не является обязательной.
Если вы вынуждены использовать установку утилизатора и использовать пружину, используйте @Required
, чтобы попросить Весну обеспечить ее соблюдение.
Применить здравый смысл во всех случаях:
спасибо за ваш ответ –
@Arun согласен с этим ответом, если это то, о чем вы просили. – nav0611
- 1. Кинжал впрыскивать на старт
- 2. Сколько способов впрыскивать компонент автоматически весной?
- 3. Директива не впрыскивать html
- 4. впрыскивать ngRoute in requiredjs
- 5. ngMock не впрыскивать завод
- 6. Необязательно впрыскивать ContainerRequestContext
- 7. - какая разница, впрыскивать зависимость?
- 8. Factory без впрыскивать зависимость
- 9. Guice: правильно впрыскивать фабричные экземпляры
- 10. Как впрыскивать в синтра/haml?
- 11. , когда нужно передать параметр и когда использовать переменную экземпляра
- 12. Когда нужно установить конструктор как constexpr?
- 13. Как впрыскивать EJB в весну
- 14. Arquillian не может впрыскивать EJB
- 15. Как впрыскивать смесь изнутри компонента?
- 16. Когда нужно складывать и когда нужно сортировать с помощью Boost.Locale?
- 17. Видеть дочерний процесс и впрыскивать зависимость
- 18. Правильно впрыскивать зависимость в тестах Angular2
- 19. Когда вам нужно включить параметр абстрактного типа?
- 20. Когда нужно использовать параметр -m32 gcc?
- 21. Когда нужно использовать ArgumentNullException
- 22. Невозможно впрыскивать фильтры в контроллер для AngularJS
- 23. Когда «IN» и когда не нужно?
- 24. DI не впрыскивать коллекцию абстрактных классов
- 25. TomEE + OpenJPA - не может впрыскивать EntityManagerFactory PersistenceUnit
- 26. не может впрыскивать routeProvider в угловых
- 27. Когда нужно распоряжаться и почему?
- 28. Node.js локальный файл-сервер CSS не впрыскивать
- 29. Как впрыскивать свободно MEF в WCF
- 30. SignalR с Ninject прекратил впрыскивать зависимости концентратора
[Это] (HTTP:. // blog.springsource.com/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/) поможет вам ... :) –
http: //misko.hevery. com/2009/02/19/constructor-injection-vs-setter-injection/ – Shashi