Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

Когда же продолжение будет? Очень хочется посмотреть на Spring
tet_ttt3 вне форума
Старый 25.11.2007, 23:01   #22
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Да похоже не будет продолжения. Имхо, удалить вообще топик, дабы голову людям не морочить.. Я вот тоже настроился на изучение, но по-моему, аффтар не расчитал своих сил..
SkyM@n вне форума
Старый 25.11.2007, 23:33   #23
tet_ttt3
 
Регистрация: 25.11.2007
Сообщений: 4
По умолчанию

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер - Быстрый старт 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