|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Результаты опроса: Интересна ли вам эта тема | |||
Да, интересно | 14 | 100.00% | |
Нет, не интересно | 0 | 0% | |
Голосовавшие: 14. Вы ещё не голосовали в этом опросе |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
25.11.2007, 22:56 | #21 |
Регистрация: 25.11.2007
Сообщений: 4
|
Когда же продолжение будет? Очень хочется посмотреть на Spring
|
25.11.2007, 23:01 | #22 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
Да похоже не будет продолжения. Имхо, удалить вообще топик, дабы голову людям не морочить.. Я вот тоже настроился на изучение, но по-моему, аффтар не расчитал своих сил..
|
25.11.2007, 23:33 | #23 |
Регистрация: 25.11.2007
Сообщений: 4
|
Это плохо... Тема очень интересная. А главное, могла бы помочь на начальном этапе понять, что принципиально из себя представляет Hibernate и Spring. Я всё-таки пока ещё надеюсь на продолжение)))
|
26.11.2007, 10:49 | #24 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Продолжение обязятельно будет! Подождите пожалуйста, думаю через неделю всё таки выкрою время
|
03.12.2007, 01:47 | #25 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 4. Введение в Spring и модель IoC
Привет всем. Наконец-то я смог выкроить время, чтобы написать очередную статью!
Сегодня у нас на очереди Spring. Spring – это фреймворк, который основывается на идее dependency injection и inversion of control. Что это такое? Вот цитата из Википедии: "Inversion of Control (IoC) — важный принцип объектно ориентированного программирования, который используется для уменьшения связности в компьютерных программах." Далее следует не совсем понятное техническое описание. "Dependency Injection (DI) — шаблон проектирования и архитектурная модель, иногда упоминаемая как Inversion of Control или IoC." Тут вообще никаких объяснений. Не бойтесь на самом деле всё очень просто, после примера Вы это поймёте. На самом деле Spring – это очень большой фреймворк, он состоит из многих составных частей, каждая из которых упрощает работу в разной области, например есть части для работы с базами данных, веб-сервисами, пользовательским интерфейсом и т.д. Я просто не в состоянии рассмотреть их все. Мы с вами рассмотрим на сегодняшнем уроке лишь элементарное приложение, которое прояснит ситуацию с IoC & DI, а на следующем уроке мы рассмотрим, Spring MVC и как спринг коннектится к Hibernate. Создадим простое приложение springTest, добавим в него библиотеки spring.jar и commons-logging.jar (если у кого-то возникли проблемы с созданием приложения – читайте предыдущие статьи, там всё написано) Идея inversion of control состоит в том, чтобы ослабить связи между частями проекта. Что это значит? Допустим у нас есть какая-либо операция, которая может в принципе быть выполнена разными способами. Для примера возьмём операцию вывода приветствия: Мы можем поздороваться так: public void printHello() { System.out.println("Hello World!"); } А можем и так: public void printHello() { System.out.println("Hello"); } Также у нас есть другая часть проекта, которая использует приветствие. Без использования IoC и Spring мы поступили бы так: Класс, который реализует приветствие: package springTest; public class SayHello { public void printHello() { System.out.println("Hello World!"); } } Класс, который использует приветсвие: package springTest; import springTest.SayHello; public class TestPage { private SayHello sayHello = new SayHello(); public void doSomething() { sayHello.printHello(); } } А теперь представьте, что вам нужно заменить реализацию приветсвия с System.out.println("Hello World!"); на System.out.println("Hello!"); При этом оставляя возможность вернуться к прежней версии приветствия. Для этого понадобится добавить новый класс со вторым вариантом приветствия и изменить класс, который его использует. А теперь представьте ту же ситуацию, но у вас не программа из двух строк, а огромный проект, с огромной кучей связей и какую-то из этих частей нужно заменить. Скорее всего перелопачивать придётся исходный код во многих местах! А теперь решим эту же задачу, но и используя подход IoC: Для нашого приветствия создаём интерфейс: package springTest; public interface ISayHello { void printHello(); } Наш интерфейс описывает только один метод - printHello(). А вот две реализации этого интерфейса: package springTest.impl; import springTest.ISayHello; public class SayHelloImpl implements ISayHello { public void printHello() { System.out.println("Hello World!"); } } И package springTest.impl; import springTest.ISayHello; public class SecondSayHelloImpl implements ISayHello { public void printHello() { System.out.println("Hello!"); } } Наш класс, который использует приветствие, спроектируем так: package springTest; import springTest.ISayHello; public class TestPage { private ISayHello sayHello; public void setSayHello(ISayHello sayHello) { this.sayHello = sayHello; } public void doSomething() { sayHelloBo.printHello(); } } Видите - TestPage ничего не знает о том, что у нас есть несколько реализаций приветствия! - у него есть только private ISayHello sayHello; и метод setSayHello с помощью которого и будет устанавливаться конкретная реализация. Тут перед тем как вызывать метод doSomething, нам нужно просетить конкретную имплементацию приветствия. Вот пример использования нашего класса TestPage: Последний раз редактировалось Umen; 03.12.2007 в 01:50. Причина: исправил заголовок |
03.12.2007, 01:49 | #26 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 4.
package springTest.run;
import springTest.ISayHello; import springTest.impl.*; public class TestRunner { public static void main(String[] args) { TestPage testPage = new TestPage(); testPage.setSayHello(new SayHelloImpl()); testPage.doSomething(); } } Вот и всё. Теперь если у нас возникнет новый способ приветствия, нам достаточно написать новый класс, который будет имплементироваеть ISayHello и просетить его в объект класса TestPage с помощью сеттера setSayHello: testPage.setSayHello(new SecondSayHelloImpl()); В данном случае связь между частями проекта выполняется в строчке testPage.setSayHello(new SayHelloBoImpl()); именно тут просечивается конкретная реализация. Spring предлагает устанавливать связи в контексте приложения, таким образом, для замены одного приветствия на другое нам даже не придётся исправлять ни строки в наших классах. Рассмотрим на примере: Классы ISayHello, SayHelloImpl, SecondSayHelloImpl и TestPage остаются без изменений. Создадим в папке src нашего проекта файл applicationContext.xml следующего содержания: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="sayHello" class="springTest.impl.SayHelloImpl "/> </beans> строкой <bean id="sayHello" class="springTest.impl.SayHelloImpl "/> мы описываем бин с именем sayHello который является экземпляром класса springTest.impl.SayHelloImpl Тогда, для того, чтобы использовать нашу реализацию SayHelloImpl перепишем TestRunner: package springTest.run; import springTest.ISayHello; import org.springframework.context.Applica tionContext; import org.springframework.context.support .ClassPathXmlApplicationContext; public class TestRunner { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("app licationContext.xml"); ISayHello sayHello = (ISayHello)context.getBean("sayHell o"); //В этом месте мы достаём наш бин TestPage testPage = new TestPage(); testPage.setSayHello(sayHello); testPage.doSomething(); } } Смотрите - теперь для того чтобы изменить реализацию с SayHelloImpl на SecondSayHelloImpl нам всего лишь нужно в файле applicationContext.xml изменить <bean id="sayHello" class="springTest.impl.SayHelloImpl "/> на <bean id="sayHello" class="springTest.impl.SecondSayHel loImpl"/> Как видите ничего сложного. Давайте пойдём ещё дальше - установим зависимость между TestPage и реализацией ISayHello прямо в контексте приложения, для это добавим в applicationContext.xml следующие строки: <bean id="testPage" class="springTest.TestPage"> <property name="sayHello" ref="sayHello"/> </bean> тут мы добавили ещё один бин с именем testPage,который является экземпляром класса springTest.TestPage и сразу же установили его поле sayHello ранее определённым бином (т.е. экземпляром класса SayHelloImpl) sayHello. Теперь соответственно поменяем TestRunner: package springTest.run; import springTest.ISayHello; import org.springframework.context.Applica tionContext; import org.springframework.context.support .ClassPathXmlApplicationContext; public class TestRunner { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("app licationContext.xml"); TestPage testPage = (TestPage) context.getBean("testPage"); testPage.doSomething(); } } Как видите обём кода значительно уменьшился по сравнению с первой версией, а гибкость значительно возросла. Тут я кратко описал модель IoC и её реализация в Spring. На сегодня всё, в следующий раз мы соеденим наш Comedy Club, Hibernate, и Spring! |
05.12.2007, 12:15 | #27 |
Регистрация: 25.11.2007
Сообщений: 4
|
Когда же нам ждать окончания?))
|
05.12.2007, 14:11 | #28 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Ждите с понедельника
|
12.12.2007, 21:54 | #29 |
Регистрация: 25.11.2007
Сообщений: 4
|
|
13.12.2007, 13:23 | #30 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Я же не сказал с какого понедельника
Извините, у меня даже на выходных нет свободного времени... Я сам очень хочу добить всё-таки статьи. Но быстро не получается. Кстати последняя статья должна быть самая большая - осталось много материала - построение бизнес логики, слоя доступа к базе данных, модель MVC. А также я выложу архив готового портала! Ждите! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ассемблер - Быстрый старт | Ev3658 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 12 | 17.01.2023 22:16 |
Старт в ВЕБе | AVer | Свободное общение | 5 | 29.03.2015 20:55 |
Старт в Java | Artem Vitalievich | Общие вопросы по Java, Java SE, Kotlin | 1 | 03.07.2014 13:15 |
Ищу веб-програмиста для старт-апа | Валентин Андреевич | Фриланс | 2 | 19.10.2011 10:25 |
Старт в Java for Mobile: Уроки | [Smarik] | Общие вопросы по Java, Java SE, Kotlin | 6 | 14.07.2010 15:17 |