|
|
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Собсно не совсем понимаю смысл использования IoC. Описываем класс. Потом в xml файле описываем бин ссылающийся на наш класс. В контейнере создается экземпляр. Далее получаем контекст ApplicationContext context = new ClassPathXmlApplicationContext(... Далее из конекста получаем наш экземпляр context.getBean(... Аналогично можно было бы напрямую создать экземпляр класса через new. В чем преемущество черех IoC? Вроде как на лету можно переопределять зависимости исправляя xml файлы..?? Но я не уверен, что так можно. Не пробовал. В общем можно както прояснить этот вопрос на простом примере? Не отсылайте на гугл плиз.. я там был и варианты знаю, но для чего так и не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 19:21:52 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Джаб, ну заканчивай уже спамить на форуме 1. Открываешь Гугл 2. Пишешь там "Marin Fowler inversion of control" 3. Читаешь статьи, набираешься знаний 4. ??? 5. PROFIT!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 19:46:50 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Использование этого кода - в большинстве случаев является ошибкой дизайна. ApplicationContext context = new ClassPathXmlApplicationContext( context.getBean(... Основное преимущество это управление зависимостями вне самих классов. В противном случае у вас в каждом классе будет куча бесполезного кода по созданию экземпляров, синглтонов, их переиспользованию и переприсванию одного объекта во все зависимые объекты. Конечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection. Ну, а как результат работы DI получаем low coupling. Т.к. классы перестают заботится о том откуда берется экземпляр другого класса. Об этом уже заботится контейнер. IoC это более общий подход. Он не только к DI применим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 19:53:30 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Много преимуществ, и да можно менять xml без переклмпиляции. К тому же смотри такой пример - тебе нужны реальные сервисы для продакшена, и стабовые для теста,все они имеют одинаковый интерфейс. ты описываешь их в 2 разных xml. Далее допустим когда ты запускаешь тесты ты можешь одной строкой поменять целую группу сервисов, просто поменяв имя включаемого файла. Далее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п. И да, почитай таки Фаулера) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 19:55:18 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
забыл никДалее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п.Ну вообще-то ни транзакции, ни скоупы к IoC никакого отношения не имеют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:10:49 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вот. В том то и дело, что я так понял, что такая инжекция больше подходит для синглтонов. Т.е., вернее, только для них и подходит. Допустим у меня имеется суперкласс и два подкласса. Если экземпляр подкласса по сути уникален, то его можно так вот заинжектить и потом, в коде, ссылаться на context.getBean(..., где он уже создан с описанными параметрами в xml и вроде всё замечательно. Но, если у экземпляра должны быть разные параметры в зависимости от ситуаций... Допустим у нас есть суперкласс машина и есть подкласс гоночная и грузовая. Я создам бин для гоночной, где укажу максимальную скорость, для грузовой максимальную грузоподьемность. А если у меня в проекте нужно будет 30 гоночных с разными максимальными скоростями? Понадобится создать 30 бинов с разным id и параметрами инициализации? Както не весело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:14:26 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Как вариант, я не создаю бины, а делаю new в нужном месте кода, для каждой гоночной машины и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:17:17 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Джаб, ну заканчивай уже спамить на форуме 1. Открываешь Гугл 2. Пишешь там "spring ioc scope prototype" 3. Читаешь статьи, набираешься знаний 4. ??? 5. PROFIT!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:17:39 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКонечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection. Боюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:21:29 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
svenomДжаб, ну заканчивай уже спамить на форуме 1. Открываешь Гугл 2. Пишешь там "spring ioc scope prototype" 3. Читаешь статьи, набираешься знаний 4. ??? 5. PROFIT!!! Не все знания приходят после прочтения статей. Нужна наработка, чтоб прочувствовать. Ну или, чтоб товарищи, прошедшие этот путь, подсказали примерчик наглядный, на котором можно прочувтсвовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:23:41 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
jabsvenomДжаб, ну заканчивай уже спамить на форуме 1. Открываешь Гугл 2. Пишешь там "spring ioc scope prototype" 3. Читаешь статьи, набираешься знаний 4. ??? 5. PROFIT!!! Не все знания приходят после прочтения статей. Нужна наработка, чтоб прочувствовать. Ну или, чтоб товарищи, прошедшие этот путь, подсказали примерчик наглядный, на котором можно прочувтсвовать. Конечно, не все. :) Но читать надо . Вы ведь прочтите вначале :) Тем более, что очень много статей на русском очень наглядно это все поясняют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:27:46 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Большой Синий Кит, читал и написал свое понимания в постах выше. З.Ы. Я ведь тоже могу заходить в любую тему и отправлять топикстартера на гугл, хотя сам при этом не буду знать ответа на вопрос, но зато напущу важности. По крайней мере, я не боюсь признаться, что я чегото не понимаю и не прячуть за общими фразами мол в литературе всё описано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 20:33:41 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
svenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control. jab. в твоем примере IoC в принципе избыточен - потому что ты работаешь с сущностью(автомобилем), IoC рулит когда тебе надо заинжектить сервисы, дао и тому подобную муть, которая зачастую и есть синглтоны, тут ты прав. Все принципы надо использовать без фанатизма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 21:18:59 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
забыл никsvenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control.Не, не путаю. А вам поясню на всякий случай. IoC - одна из методик уменьшения связанности между объектами. Это подход. DI - одна из реализаций IoC. Другая распространенная реализация - Service Locator Идем дельше - как реализуются DI? а) контейнеры; б) фабрики. Spring IoC - это IoC, реализованный через DI, реализованный через контейнер. Вам стало понятнее? Идем дальше - что такое Spring IoC? Это модуль, который реализует непосредственно контейнер. Все. То есть это Context, BeanFactory и их реализации. Идем дальше - транзакции в Spring. Что это? Это библиотека классов. И так как эти классы имеют конструкторы, геттеры и сеттеры, то вы, само собой, можете их использовать в спринговом контексте. Для упрощения работы с ними в спринге есть синтаксический сахар, с помощью которого можно вместо, например, объявления всяких интерсепторов и проксей в контексте, просто написать tx:annotation-driven, но идея остается та же - транзакции не имеют никакого отоношения к IoC. IoC это подход к управлению зависимостями между классами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 21:31:07 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
jabСобсно не совсем понимаю смысл использования IoC Сейчас смысл от IoC чувствуется при использовании web-фреймворков предоставляют поддержку Spring'а "из коробки". Для вас, по сути тоже самое - просто помечаете аннотацией какой-нибудь userService и он сам будет правильно инициализирован. Вот тогда становится приятно, и жизнь существенно облегчается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 21:40:44 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
:) Ты все-таки не понимаешь чем они отличаются. Все то что ты красиво описал - это и есть Dependency Injection, а вот IoC это как раз более масштабный принцип, следуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логики, вот почему декларативное управление транзакциями это часть IoC, насчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами. И да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество. Сами же советовали Фаулера, а то человек почитает вас и примет ваши догадки за истину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 21:57:14 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Leonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится. Что может быть не правильным тут? Но для этого мне надо ещё предварительно этот бин описать. По поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы. Реализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 21:57:24 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
забыл никВсе то что ты красиво описал - это и есть Dependency InjectionПовторяемс: IoC -> DI -> SpringIoC (containter) забыл ника вот IoC это как раз более масштабный принципЭта фраза вроде по делу, но вот только я уже об этом написал. забыл никследуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логикиА вот это уже жесть пошла. Почитайте тут: http://msdn.microsoft.com/en-us/library/ff648478.aspx http://msdn.microsoft.com/en-us/library/dd458879.aspx http://msdn.microsoft.com/en-us/library/ff648476.aspx Теперь на пальцах попробую вам объяснить: Есть интерфейс А, есть интерфейс В. Есть реализация AImpl, есть реализация BImpl, у которой один из членов класса - типа А. Вопрос: как сказать реализации BImpl, инстанс какого класса использовать на месте интерфейса A? Решение в лоб: Код: java 1. 2. 3. 4. 5. 6. Решение? Решение. Но вот незадача - у нас тут high coupling, так как BImpl обязан знать об AImpl, а потому все наши интерфейсы нахрен никому не сдались. А вот другое возможное решение: Код: java 1. 2. 3. 4. 5. 6. Что мы тут сделали? Мы делегировали контроль над тем, какую реализацию интерфейса A впихнуть BImpl за пределы BImpl. В этом и заключается IoC = Inversion of Control = Инверсия контроля . Что значит инверсия ? Значит вместо одного действия (создаем объект сами) мы переходим к обратному действию (просим создать объект за нас). Что значит контроль ? Контроль чего? Контроль вставки зависимости в класс. Приведенный мною пример это IoC через ServiceLocator . Вам становится яснее? Все таки прочитайте ссылки с MSDN, которые я привел выше, в особенности на картинки посмотрите. После того, как вы это сделаете, вы поймете, что фраза: забыл никследуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логикиесть ни что иное, как бред. забыл никвот почему декларативное управление транзакциями это часть IoCЕще раз. Управление транзакциями это часть IoC = false . Управление транзакциями это часть SpringIoC = false ; Управление транзакциями есть в одной из частей Spring = true . забыл никнасчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами.Логическая ошибка. IoC это один из методов уменьшения связанности классов = true Все, что уменьшает связанность классов, это IoC = false забыл никИ да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество.Круто, то есть у нас получается примерно следующий разговор: Я: Банановая кожура скользкая! Вы: Нет! Неправильно! На банановой кожуре можно подскользнутся! Кэп? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 22:21:01 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
Ты бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая, почитал бы все-таки Фаулера, раз я для тебя не авторитет) и пораскинул мозгом. http://martinfowler.com/bliki/InversionOfControl.html. Все что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC, а ты мне все про DI втираешь:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 22:53:37 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
svenom, Респект, отлично расписано. Я даже по вашему ответу систематизировал свои знания:) С спорах рождается истина. А по теме. Вообще, IoC, в частности DI - это такая тема, которую сложно вот так понять, просто прочитав пару статей. Сам неоднократно пытался "въехать". Читал статьи, топики на хабре. Залезал в чужие языки, потому что про Java не находил. Но понять всё равно до конца не мог. Ну меньшая связанность кода, да (очень, кстати, расплывчатое понятие), ну типа должно быть удобно(но только должно быть, как именно - непонятно), а в чём реальный то смысл? Тут нужна практика. Пока не попробуещь - не поймешь. Пока сам не использовав пару раз уже готовый и настроенный самописный DI в одном из наших проектов - не понял. Это на уровне эмоций. Используешь, и только пост-фактум понимаешь, что это действительно, блин, удобно. Например, стандартный пример - DAO классы. Они могут понадобиться в любом месте. Любой DAO класс. Не предугадаешь заранее. Поэтому их логично засунуть в контейнер, и потом просто одной строчкой кода(ну ладно, с аннотацией - двумя) подключить в нужном месте. И так же легко убрать, если не нужно. Во-первых, не нужно париться над созданием объекта, управление жизненым циклом. Во-вторых, не загромождаешь логику(код самих методов) одинаковыми, ненужными созданиями нужных тебе постоянно классов. С этим @Autowired всё смотрится органично. Потом по-другому уже просто не можешь:) И в третьих, не нужно синглтонов - достаточно спорный паттерн, у которого есть свои минусы. Особенно на Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 22:54:26 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
jabLeonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится. 1. @Autowired (или @Resource) это на уровне Spring'а. Интгерация с Wicket, например, осуществляется через аннотацию @SpringBean. 2. Необязательно без параметров. Параметры можно в xml-ке задать; 3. Еще есть @PostCreated (вроде так) - выполняет после инициализации компонентов. jabЧто может быть не правильным тут? К чему это, я не осознал... jabНо для этого мне надо ещё предварительно этот бин описать. Не ясно, что значит "описать". Можно пометить аннотацией @Service. jabРеализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания. Ну так по хорошему Spring активно использует интерфейсы. jabПо поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы. Тестирование уровней. Например, тестируете вы какую-нибудь форму. А в коде там вот так: Код: java 1. И все, протестировать нормально будет очень тяжело. А если там вот так: Код: java 1. 2. 3. 4. то в тесте делаем вот так: Код: java 1. 2. 3. Что позволит вам очень просто проверить код именно MyWindow, изолировав его выполнение от других компонент. Что и есть сутью модульного тестирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 23:02:15 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
забыл никТы бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая То есть с момента публикации статьи понятия Inversion of Control, Dependency Injection и Service Locator как-то принципиально изменились? забыл никВсе что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC , а ты мне все про DI втираешьСначала пара логических утверждений: DI это IoC = true Если мы говорим про DI, следовательно мы говорим про IoC = true А теперь по поводу вашей фразы, выделенной жирным - к сожалению, она бессмысленна. Поясните вот эти моменты: 1) Что такое "обычный ход выполнения программы"? Значит есть "необычный"? Как их отличить друг от друга и в чем заключаются их характерные черты? 2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"? Еще раз, максимально сжато: IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту. Я не знаю, как это можно еще проще объяснить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 23:05:15 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
jabБоюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты...IoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;) к примеру настройку соединения с БД проще держать в конфиге, а не в коде. чтобы не пересобирать проект каждый раз когда сменился пароль у пользователя. дальше - больше. но на тестовом проекте профита от Spring IoC может и не оказаться. Дольше Spring настраивать по сравнению с реализацией 2-3 функций выполняющих реальную логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 23:34:53 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
VoDAIoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;)IoC это наиболее известная и применимая реализация подхода "code to interfaces". То есть можно смело сказать, что использование IoC значительно улучшит качество 95% проектов без оного за счет серьезного снижения связанности компонентов, причем проектов любого размера. Да, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет? VoDAк примеру настройку соединения с БД проще держать в конфиге, а не в коде. чтобы не пересобирать проект каждый раз когда сменился пароль у пользователя.Утверждение к теме IoC ортогонально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2011, 23:43:04 |
|
||
|
Какие приемущества использования IoC контейнера?
|
|||
|---|---|---|---|
|
#18+
svenomДа, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет? 5-10 классов, да еще на java. феноменально. как вы только умудряетесь в одиночку такие огромные проекты поднимать? ;) если на 5-10 ваших классах IoC реально помогает - ура, я рад за вас. у меня рабочий функционал реальных проектов ну ни разу не укладывался в 10 классов (надеюсь эти классы не забиты вложенными до уровня 5-10 тыс строк кода ). и для себя использовать IoC для 10 классов я считаю не выгодным. в качестве исключения обучение и прототипизация работы с конкретным IoC контейнером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2011, 00:29:08 |
|
||
|
|

start [/forum/moderation_log.php?user_name=%D0%A7%D0%B0%D0%B9%D0%BD%D0%B8%D0%BA+%D1%81+Java]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
get settings: |
16ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 674ms |
| total: | 911ms |

| 0 / 0 |
