powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
25 сообщений из 248, страница 1 из 10
Какие приемущества использования IoC контейнера?
    #37563823
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсно не совсем понимаю смысл использования IoC. Описываем класс. Потом в xml файле описываем бин ссылающийся на наш класс. В контейнере создается экземпляр. Далее получаем контекст ApplicationContext context = new ClassPathXmlApplicationContext(... Далее из конекста получаем наш экземпляр context.getBean(...
Аналогично можно было бы напрямую создать экземпляр класса через new.
В чем преемущество черех IoC? Вроде как на лету можно переопределять зависимости исправляя xml файлы..?? Но я не уверен, что так можно. Не пробовал. В общем можно както прояснить этот вопрос на простом примере? Не отсылайте на гугл плиз.. я там был и варианты знаю, но для чего так и не понял.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563866
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "Marin Fowler inversion of control"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563879
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование этого кода - в большинстве случаев является ошибкой дизайна.
ApplicationContext context = new ClassPathXmlApplicationContext(
context.getBean(...

Основное преимущество это управление зависимостями вне самих классов. В противном случае у вас в каждом классе будет куча бесполезного кода по созданию экземпляров, синглтонов, их переиспользованию и переприсванию одного объекта во все зависимые объекты.
Конечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection.

Ну, а как результат работы DI получаем low coupling. Т.к. классы перестают заботится о том откуда берется экземпляр другого класса. Об этом уже заботится контейнер.

IoC это более общий подход. Он не только к DI применим.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563883
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много преимуществ, и да можно менять xml без переклмпиляции. К тому же смотри такой пример - тебе нужны реальные сервисы для продакшена, и стабовые для теста,все они имеют одинаковый интерфейс. ты описываешь их в 2 разных xml. Далее допустим когда ты запускаешь тесты ты можешь одной строкой поменять целую группу сервисов, просто поменяв имя включаемого файла. Далее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п. И да, почитай таки Фаулера)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563909
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДалее IOC позволяет декларативно настроить транзакции, скоупы жизни бинов и т.д. и т.п.Ну вообще-то ни транзакции, ни скоупы к IoC никакого отношения не имеют.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563919
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, вот. В том то и дело, что я так понял, что такая инжекция больше подходит для синглтонов. Т.е., вернее, только для них и подходит. Допустим у меня имеется суперкласс и два подкласса. Если экземпляр подкласса по сути уникален, то его можно так вот заинжектить и потом, в коде, ссылаться на context.getBean(..., где он уже создан с описанными параметрами в xml и вроде всё замечательно. Но, если у экземпляра должны быть разные параметры в зависимости от ситуаций... Допустим у нас есть суперкласс машина и есть подкласс гоночная и грузовая. Я создам бин для гоночной, где укажу максимальную скорость, для грузовой максимальную грузоподьемность. А если у меня в проекте нужно будет 30 гоночных с разными максимальными скоростями? Понадобится создать 30 бинов с разным id и параметрами инициализации? Както не весело.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563927
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, я не создаю бины, а делаю new в нужном месте кода, для каждой гоночной машины и всё.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563928
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563931
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczКонечно это не так просто понять, пока сам не наступишь на эти грабли. Если будет маленький проект - на пару недель работы - попробуйте реализовать без Dependency Injection.
Боюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты...
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563932
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomДжаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!

Не все знания приходят после прочтения статей. Нужна наработка, чтоб прочувствовать. Ну или, чтоб товарищи, прошедшие этот путь, подсказали примерчик наглядный, на котором можно прочувтсвовать.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563938
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabsvenomДжаб, ну заканчивай уже спамить на форуме
1. Открываешь Гугл
2. Пишешь там "spring ioc scope prototype"
3. Читаешь статьи, набираешься знаний
4. ???
5. PROFIT!!!

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

Конечно, не все. :) Но читать надо . Вы ведь прочтите вначале :)
Тем более, что очень много статей на русском очень наглядно это все поясняют.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563952
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит, читал и написал свое понимания в постах выше.

З.Ы. Я ведь тоже могу заходить в любую тему и отправлять топикстартера на гугл, хотя сам при этом не буду знать ответа на вопрос, но зато напущу важности. По крайней мере, я не боюсь признаться, что я чегото не понимаю и не прячуть за общими фразами мол в литературе всё описано.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563991
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom, ты часом DI и IoC не путаешь?:) Декларативное описание транзакций и скоупов по сути и есть inversion of control.

jab. в твоем примере IoC в принципе избыточен - потому что ты работаешь с сущностью(автомобилем), IoC рулит когда тебе надо заинжектить сервисы, дао и тому подобную муть, которая зачастую и есть синглтоны, тут ты прав. Все принципы надо использовать без фанатизма
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37563999
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник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 это подход к управлению зависимостями между классами.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564008
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabСобсно не совсем понимаю смысл использования IoC
Сейчас смысл от IoC чувствуется при использовании web-фреймворков предоставляют поддержку Spring'а "из коробки". Для вас, по сути тоже самое - просто помечаете аннотацией какой-нибудь userService и он сам будет правильно инициализирован. Вот тогда становится приятно, и жизнь существенно облегчается.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564023
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) Ты все-таки не понимаешь чем они отличаются. Все то что ты красиво описал - это и есть Dependency Injection, а вот IoC это как раз более масштабный принцип, следуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логики, вот почему декларативное управление транзакциями это часть IoC, насчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами. И да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество. Сами же советовали Фаулера, а то человек почитает вас и примет ваши догадки за истину.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564024
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится. Что может быть не правильным тут? Но для этого мне надо ещё предварительно этот бин описать. По поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы. Реализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564047
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВсе то что ты красиво описал - это и есть 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.
public class B {
    private A a;
    public B() {
        a = new AImpl();
    }
}


Решение? Решение. Но вот незадача - у нас тут high coupling, так как BImpl обязан знать об AImpl, а потому все наши интерфейсы нахрен никому не сдались.

А вот другое возможное решение:
Код: java
1.
2.
3.
4.
5.
6.
public class B {
    private A a;
    public B() {
        a = ServiceLocator.get(A.class);
    }
}


Что мы тут сделали? Мы делегировали контроль над тем, какую реализацию интерфейса A впихнуть BImpl за пределы BImpl. В этом и заключается IoC = Inversion of Control = Инверсия контроля . Что значит инверсия ? Значит вместо одного действия (создаем объект сами) мы переходим к обратному действию (просим создать объект за нас). Что значит контроль ? Контроль чего? Контроль вставки зависимости в класс.
Приведенный мною пример это IoC через ServiceLocator .

Вам становится яснее? Все таки прочитайте ссылки с MSDN, которые я привел выше, в особенности на картинки посмотрите. После того, как вы это сделаете, вы поймете, что фраза:
забыл никследуя которому некоторую специфическую часто повторяющуюся логику(зачастую инфраструктурную) обособляют от так называемой бизнес-логикиесть ни что иное, как бред.

забыл никвот почему декларативное управление транзакциями это часть IoCЕще раз.
Управление транзакциями это часть IoC = false .
Управление транзакциями это часть SpringIoC = false ;
Управление транзакциями есть в одной из частей Spring = true .

забыл никнасчет скоупов ты даже сами себе противоречишь, утверждая что IoC - одна из методик уменьшения связанности между объектами, так вот избавление от контроля за циклом жизни объектов, это и есть ничто иное, как методика уменьшения связанности между объектами.Логическая ошибка.
IoC это один из методов уменьшения связанности классов = true
Все, что уменьшает связанность классов, это IoC = false

забыл никИ да, DI это вовсе никакая не реализация IoC, а всего лишь его подмножество.Круто, то есть у нас получается примерно следующий разговор:
Я: Банановая кожура скользкая!
Вы: Нет! Неправильно! На банановой кожуре можно подскользнутся!
Кэп?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564089
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая, почитал бы все-таки Фаулера, раз я для тебя не авторитет) и пораскинул мозгом. http://martinfowler.com/bliki/InversionOfControl.html. Все что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC, а ты мне все про DI втираешь:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564091
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

Респект, отлично расписано. Я даже по вашему ответу систематизировал свои знания:) С спорах рождается истина.

А по теме. Вообще, IoC, в частности DI - это такая тема, которую сложно вот так понять, просто прочитав пару статей. Сам неоднократно пытался "въехать". Читал статьи, топики на хабре. Залезал в чужие языки, потому что про Java не находил. Но понять всё равно до конца не мог. Ну меньшая связанность кода, да (очень, кстати, расплывчатое понятие), ну типа должно быть удобно(но только должно быть, как именно - непонятно), а в чём реальный то смысл? Тут нужна практика. Пока не попробуещь - не поймешь. Пока сам не использовав пару раз уже готовый и настроенный самописный DI в одном из наших проектов - не понял. Это на уровне эмоций. Используешь, и только пост-фактум понимаешь, что это действительно, блин, удобно. Например, стандартный пример - DAO классы. Они могут понадобиться в любом месте. Любой DAO класс. Не предугадаешь заранее. Поэтому их логично засунуть в контейнер, и потом просто одной строчкой кода(ну ладно, с аннотацией - двумя) подключить в нужном месте. И так же легко убрать, если не нужно. Во-первых, не нужно париться над созданием объекта, управление жизненым циклом. Во-вторых, не загромождаешь логику(код самих методов) одинаковыми, ненужными созданиями нужных тебе постоянно классов. С этим @Autowired всё смотрится органично. Потом по-другому уже просто не можешь:) И в третьих, не нужно синглтонов - достаточно спорный паттерн, у которого есть свои минусы. Особенно на Java.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564097
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabLeonidv, какой аннотацией? Это про @Autowired идет разговор? Ну так там просто конструктор класса без параметров выполнится.
1. @Autowired (или @Resource) это на уровне Spring'а. Интгерация с Wicket, например, осуществляется через аннотацию @SpringBean.
2. Необязательно без параметров. Параметры можно в xml-ке задать;
3. Еще есть @PostCreated (вроде так) - выполняет после инициализации компонентов.

jabЧто может быть не правильным тут?
К чему это, я не осознал...

jabНо для этого мне надо ещё предварительно этот бин описать.
Не ясно, что значит "описать". Можно пометить аннотацией @Service.

jabРеализация слабой связанности, на уровне интерфейсов, более прозрачна для понимания.
Ну так по хорошему Spring активно использует интерфейсы.

jabПо поводу слабой связанности понятно, но какбы мне пока ещё не пришлось столкнуться реально, где это мне пригодилось бы.
Тестирование уровней. Например, тестируете вы какую-нибудь форму. А в коде там вот так:
Код: java
1.
class MyWindow { private UserService userService = new UserService()}



И все, протестировать нормально будет очень тяжело. А если там вот так:
Код: java
1.
2.
3.
4.
class MyWindow { 
 @Autowired 
 private UserService userService; // и set/get к нему
}


то в тесте делаем вот так:

Код: java
1.
2.
3.
UserService userServiceMock = mock(UserService.class);
userServiceMock.when(userServiceMock.getUsers()).return(asList(new User("Petya"),new User("Vasya"))).
myWindow.setServiceUser(userServiceMock)



Что позволит вам очень просто проверить код именно MyWindow, изолировав его выполнение от других компонент. Что и есть сутью модульного тестирования.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564099
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никТы бы вместо того чтобы нервничать и подсовывать ссылки на статьи, в которых вначале прям таки написано что эта информация устаревшая То есть с момента публикации статьи понятия Inversion of Control, Dependency Injection и Service Locator как-то принципиально изменились?

забыл никВсе что делается не внутри обычного хода выполнения программы, а отдается на откуп фреймфоркам или контейнерам и есть IoC , а ты мне все про DI втираешьСначала пара логических утверждений:
DI это IoC = true
Если мы говорим про DI, следовательно мы говорим про IoC = true

А теперь по поводу вашей фразы, выделенной жирным - к сожалению, она бессмысленна. Поясните вот эти моменты:
1) Что такое "обычный ход выполнения программы"? Значит есть "необычный"? Как их отличить друг от друга и в чем заключаются их характерные черты?
2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Еще раз, максимально сжато: IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту. Я не знаю, как это можно еще проще объяснить
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564132
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabБоюсь, что пока не будет. Я сам себе придумываю проекты, чтоб разобраться в вопросах. Не берут меня пока в проекты...IoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;)

к примеру настройку соединения с БД проще держать в конфиге, а не в коде. чтобы не пересобирать проект каждый раз когда сменился пароль у пользователя.

дальше - больше. но на тестовом проекте профита от Spring IoC может и не оказаться. Дольше Spring настраивать по сравнению с реализацией 2-3 функций выполняющих реальную логику.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564139
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAIoC и прочая enterpriZe муть (тс...) показывает бонусы только на больших проектах. В проекте на 2-3 класса IoC yfabu не впился - new и все дела ;)IoC это наиболее известная и применимая реализация подхода "code to interfaces". То есть можно смело сказать, что использование IoC значительно улучшит качество 95% проектов без оного за счет серьезного снижения связанности компонентов, причем проектов любого размера.
Да, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет?

VoDAк примеру настройку соединения с БД проще держать в конфиге, а не в коде. чтобы не пересобирать проект каждый раз когда сменился пароль у пользователя.Утверждение к теме IoC ортогонально
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564197
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomДа, на маленьких проектах профита меньше, чем на средних и больших. Но буквально 5-10 взаимодействующих классов - IoC уже значительно облегчает жизнь - легче поддерживать, легче расширять и т.д.. Я только не знаю - 5-10 классов это уже большой проект в вашей терминологии или нет? 5-10 классов, да еще на java. феноменально. как вы только умудряетесь в одиночку такие огромные проекты поднимать? ;)

если на 5-10 ваших классах IoC реально помогает - ура, я рад за вас. у меня рабочий функционал реальных проектов ну ни разу не укладывался в 10 классов (надеюсь эти классы не забиты вложенными до уровня 5-10 тыс строк кода ). и для себя использовать IoC для 10 классов я считаю не выгодным. в качестве исключения обучение и прототипизация работы с конкретным IoC контейнером.
...
Рейтинг: 0 / 0
25 сообщений из 248, страница 1 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]