Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Результаты опроса: Интересна ли вам эта тема
Да, интересно 14 100.00%
Нет, не интересно 0 0%
Голосовавшие: 14. Вы ещё не голосовали в этом опросе

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 25.11.2007, 23:56   #21
tet_ttt3
 
Регистрация: 25.11.2007
Сообщений: 4
Репутация: 10
По умолчанию

Когда же продолжение будет? Очень хочется посмотреть на Spring
tet_ttt3 вне форума  
Старый 26.11.2007, 00:01   #22
SkyM@n
линуксоид
Профессионал
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Адрес: //Ukraine/Lutsk
Сообщений: 2,830
Репутация: 927

icq: 98888908
skype: adventist.ua
По умолчанию

Да похоже не будет продолжения. Имхо, удалить вообще топик, дабы голову людям не морочить.. Я вот тоже настроился на изучение, но по-моему, аффтар не расчитал своих сил..
__________________
Хостинг за 1 доллар в месяц: 100 Mb + все включено!
http://s45.radikal.ru/i110/0812/92/bb8898c6c998.jpg
Через личку, аську, скайп и т.д. бесплатно не помогаю.
SkyM@n вне форума  
Старый 26.11.2007, 00:33   #23
tet_ttt3
 
Регистрация: 25.11.2007
Сообщений: 4
Репутация: 10
По умолчанию

Это плохо... Тема очень интересная. А главное, могла бы помочь на начальном этапе понять, что принципиально из себя представляет Hibernate и Spring. Я всё-таки пока ещё надеюсь на продолжение)))
tet_ttt3 вне форума  
Старый 26.11.2007, 11:49   #24
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
Репутация: 203
По умолчанию

Продолжение обязятельно будет! Подождите пожалуйста, думаю через неделю всё таки выкрою время
Umen вне форума  
Старый 03.12.2007, 02:47   #25
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
Репутация: 203
По умолчанию Урок 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 в 02:50. Причина: исправил заголовок
Umen вне форума  
Старый 03.12.2007, 02:49   #26
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
Репутация: 203
По умолчанию Урок 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!
Umen вне форума  
Старый 05.12.2007, 13:15   #27
tet_ttt3
 
Регистрация: 25.11.2007
Сообщений: 4
Репутация: 10
По умолчанию

Когда же нам ждать окончания?))
tet_ttt3 вне форума  
Старый 05.12.2007, 15:11   #28
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
Репутация: 203
По умолчанию

Ждите с понедельника
Umen вне форума  
Старый 12.12.2007, 22:54   #29
tet_ttt3
 
Регистрация: 25.11.2007
Сообщений: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Umen Посмотреть сообщение
Ждите с понедельника
Начинаю отчаиваться... Но пока ещё верю!!!!!
tet_ttt3 вне форума  
Старый 13.12.2007, 14:23   #30
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
Репутация: 203
По умолчанию

Я же не сказал с какого понедельника

Извините, у меня даже на выходных нет свободного времени...
Я сам очень хочу добить всё-таки статьи. Но быстро не получается. Кстати последняя статья должна быть самая большая - осталось много материала - построение бизнес логики, слоя доступа к базе данных, модель MVC. А также я выложу архив готового портала!

Ждите!
Umen вне форума  
Закрытая тема



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание и обсуждение игр 743 08.07.2017 13:38
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Уроки по использованию Direct3D в Delphi Kostia Gamedev - cоздание и обсуждение игр 32 23.02.2010 18:48
После нажатия старт идёт типа прогресс и отправляет скачать полную версию программы aminov Фриланс 13 28.07.2008 16:34




06:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru