Любой, кто выучил весеннюю структуру, должен был слышать о двух понятиях Spring: IOC (контрольная инверсия) и DI (инъекция зависимости). Для тех, кто является новым для весны, они всегда чувствуют, что концепции МОК и ди расплывчаты и трудно понять. Сегодня я поделюсь с вами некоторыми из интернет -технических экспертов по пониманию весенней структуры МОК и расскажу о моем понимании весеннего МОК.
Что такое IOC
IOC-InversionOfControl, то есть «контроль инверсия», является не технологией, а идеей дизайна. В разработке Java IOC означает, что они предназначены для управления контейнерами, а не традиционно управлять ими непосредственно внутри ваших объектов.
МОК, который является ядром пружины, проходит через все время. Для весенней структуры Spring отвечает за контроль жизненного цикла объекта и взаимосвязи между объектами. Что это значит? Чтобы привести простой пример, как мы находим девушку? Общая ситуация заключается в том, что мы идем везде, чтобы увидеть, где у нас есть красивые и красивые женщины, а затем спрашиваем о их интересах, номерах QQ, номере телефонных номеров, номерах IQ ..., найдите способы узнать их, дать им то, что они любят, а затем хе-хе ... этот процесс сложный и глубокий, и мы должны сами познакомиться и познакомиться с каждым звеном. То же самое относится и к традиционной разработке программ. В объекте, если вы хотите использовать другой объект, вы должны получить его (новый самостоятельно или запросить один из JNDI). После использования объект должен быть уничтожен (например, соединение и т. Д.), А объект всегда будет объединен с другими интерфейсами или классами.
Как понять IOC? Ключ к пониманию МОК - уточнить «кто контролирует, кто, что контролирует, почему это изменение (должно быть положительное), и какие аспекты изменения существуют», давайте проанализируем глубину:
● Кто контролирует, кого и что: традиционный дизайн программирования Javase, мы создаем объекты непосредственно через новые внутри объекта, и программа активно создает зависимые объекты; В то время как МОК имеет специальный контейнер для создания этих объектов, то есть контейнер МОК управляет созданием объектов; Кто кого контролирует? Конечно, контейнер IOC управляет объектом; Что контролировать? То есть он в основном контролирует приобретение внешних ресурсов (а не только объекты, включая файлы и т. Д.).
● Почему это инверсия? Какие аспекты являются инверсией: есть положительное вращение. Традиционные приложения активно контролируются нами в объекте для непосредственного получения зависимого объекта, то есть положительного вращения; В то время как инверсия является контейнером, который помогает создавать и вводить зависимые объекты; Почему это инверсия? Поскольку контейнер помогает нам найти и вводить зависимые объекты, объект только пассивно принимает зависимые объекты, так что это инверсия; Какие аспекты инверсии? Приобретение зависимого объекта изменен.
Давайте использовать легенду, чтобы проиллюстрировать, что традиционное программирование показано на рисунке 1-1, что активно создает связанные объекты, а затем их объединяет:
Рисунок 1-1 Схематическая схема традиционного применения
Когда у меня есть контейнеры IOC/DI, эти объекты больше не создаются в классе клиента, как показано на рисунке 1-2:
Рисунок 1-2 Схематическая диаграмма структуры программы после контейнера IOC/DI имеет контейнер IOC/DI
1.1.2 Что может сделать IOC
МОК не является технологией, это просто мысль, важное правило объектно-ориентированного программирования, которое может направить нас, как разрабатывать слабо связанные, лучшие программы. Все традиционные приложения активно создаются нами в классе, что приводит к высокой связи между классами и трудно тестировать; С контейнером IOC управление созданием и поиском зависимых объектов передается контейнеру, а контейнер вводит комбинированные объекты, поэтому объект слабо связан, что также удобно для тестирования, облегчает функциональное повторное использование и, что более важно, делает всю архитектуру программы очень гибкой.
Фактически, самое большое изменение, внесенное МОК для программирования, связано не с кодексом, а с идеологической точки зрения, и изменение «транспозиции мастер-раба». Первоначально заявление было начальником, и он взял на себя инициативу по получению любых ресурсов. Однако, в идее МОК/DI, приложение стало пассивным, и он пассивно ждал, пока контейнер IOC создаст и внедрил необходимые ресурсы.
МОК хорошо отражает одно из правил объектно -ориентированного дизайна - Голливудское правило: «Не ищите нас, мы будем искать вас»; То есть контейнер IOC помогает объекту найти соответствующий зависимый объект и вводить его, а не объект, активно ищущий его.
1.1.3 IOC и DI
Di-DepectendencyInction, то есть «инъекция зависимости»: зависимости между компонентами определяются контейнером во время выполнения. В переносном смысле контейнер динамически вводит определенную зависимость в компонент. Цель инъекции зависимостей состоит не в том, чтобы привлечь больше функций в программную систему, а для увеличения частоты повторного использования компонентов и создания гибкой и масштабируемой платформы для системы. Через механизм впрыска зависимостей нам нужно только указать ресурсы, необходимые для цели без какого -либо кода для завершения нашей собственной бизнес -логики посредством простой конфигурации, не заботясь о том, откуда поступают конкретные ресурсы и которые их реализуют.
Одна из ключевых моментов МОК - динамически предоставить объект с другими объектами, которые ему нужны во время работы системы. Это достигается посредством DI (инъекция зависимости). Например, объект A должен работать с базой данных. В прошлом мы всегда писали код в A, чтобы получить объект соединения. С пружиной нам нужно только сказать Spring, что подключение необходимо в A. Что касается того, чтобы построить это соединение и когда его построить, A не нужно знать. Когда система работает, Spring создаст соединение в соответствующее время, а затем введет его в подобную инъекцию, что завершит контроль взаимосвязи между каждым объектом. Необходимо полагаться на соединение, чтобы работать нормально, и это соединение вводится в пружину, и из этого исходит название инъекции зависимостей. Так как же реализован DI? Важной особенностью после Java 1.3 является отражение, которое позволяет программе динамически генерировать объекты, выполнять методы объектов и изменять свойства объектов при запуске. Весна вводится через отражение.
Ключ к пониманию DI: «Кто зависит от того, кто, зачем вам зависеть от этого, кто вводит кого и что вводит его». Давайте подробно проанализируем это:
● Кто зависит от того, кого: конечно, приложение зависит от контейнера МОК;
● Почему необходимы зависимости: приложениям нужны контейнеры IOC для предоставления внешних ресурсов, требуемых объектами;
● Кто вводит кого: очевидно, что контейнер IOC вводит объект приложения, объект, от которого зависит приложение;
● Что вводится: он должен внедрить внешние ресурсы (включая объекты, ресурсы и постоянные данные), необходимых для объекта.
Каковы отношения между МОК и Ди? Фактически, они описаны с разных точек зрения с одной и той же концепции. Поскольку концепция контрольной инверсии относительно расплывчата (возможно, она понимается как уровень объектов контроля контейнеров, трудно подумать о том, кто будет поддерживать отношения объектов), в 2004 году мастер Мартин Фаулер дал новое имя: «Инъекция зависимости». По сравнению с МОК, «инъекция зависимости» четко описывает », инъекционный объект зависит от объекта зависимости контейнера IOC».
Суммировать
На самом деле, у каждого свое понимание концепции весеннего МОК, и нет стандартного ответа. Общее направление просто правильно.
Вышеуказанное касается понимания инъекции зависимости и контрольной инверсии весной. Я надеюсь, что это будет полезно для всех. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!