Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring, простой пример  
:(
    Опции темы
Samotnik
Дата 8.5.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Не давно начал изучать новый (для меня) framework под названием  Spring. Зайдя на гугл, приятно удивился, информации по данной теме очень много, главный источник, это оффициальный сайт.  Но к сожалению маленького примерчика с обьяснениями я так и не нашел. Вот решил сделать сам что-то (естественно опираясь на литературу из сети,  в основонм от сюда
ИТАК.
Что же такое  Spring ?
Spring это легковесный opensource J2EE Framework, разработка которого началась в феврале 2003 года. Основой послужил программный код, опубликованный в книге Expert One-on-One Design and Development (Автор Род Джонсон, 2002 г.). Причем основные идеи возникли еще в 2000 году и являлись отражением опыта успешной разработки нескольких коммерческих проектов. Сейчас Spring это достаточно популярный opensource проект, охватывающий многие аспекты как J2EE, так и Java разработок.
В основе Spring лежит 7 составляющих (см. рисунок  smile )
user posted image
user posted image
1)The core container: 
Ядро, это основа работы всего фрэймворка. В нем содержится весь основной функционал, принципы и философия Spring. В нем основным компонентом является BeanFactory.  BeanFactory применяет Inversion of Control (IOC) pattern для разьединения конфигурации приложения. Т.е. этот паттерн помогает вам не создавать ваши обьекты, а обьявлять как они должны быть созданны. Все компаненты и сервисы связываются не на прямую, а через конфигурационный файл.  
2) Spring context module: 
Это конфигурационный файл, который предоставляет необходимую информацию Спрингу. Spring context включает различные сервисы, такие как  jndi, e-mail, EJB, интернационализацию, валидацию, и т.д. Также включает поддержку интеграции с различными другими фрэймворками (velocity, .... )
3) Spring AOP module:
Spring AOP позволяет расширять программные компоненты, с дополнительными способностями, через свою собственную конфигурацию. Вобщем, спринг, может управлять любым  AOP  обьктом. С помощью Spring AOP можно неявно управлять транзакциями в своем приложении без  доп компонентов. 
4) Spring DAO module:  
Тут все из названия понятно. Поддержка JDBC, DAO   smile 
5) Spring ORM module:
Интеграция  с Hibernate, JDO, iBATIS. И вообще, поддержка всех ORM фрэймворков.
6)Spring Web module:
тут тоже все понятно, полная интеграция и взаимодействие с WEB фреймворками (Struts  к примеру).  Простое использование  спринга в WEB  приложениях (J2EE имеется в виду  smile )
7)Spring MVC framework module:
Поддержка и использование знаментитого паттерна  M-V-C      Model - View - Controller.  Разграничение обязанностей между 3-я компонентами.    

Это было краткое описание, основных модулей работы Spring Framework.  О них можно очень подробно прочитать на оффициальном сайте.  тут
Все же, цель моей статьи: написать маленькое и понятное приложение на спринге. С обьяснениями. 
Поехали  smile 
1. Создадим 2 простых интерфейса, в котором будет обьявленно по одному методу  hello и  bye  и для удобства положим их в пакет service
ByeService
Код

package service;
import domain.Name;
public interface ByeService {
    public String sayBye(Name name);
}

HelloService
Код

package service;
import domain.Name;
public interface HelloService {
    public String sayHello(Name name);
}

Рас у нас есть интерфесы, значит все методы там обьявленные нужно заимплементить.  положим эти классы в пакет serviceImpl
ByeServiceImpl
Код

package serviceImpl;

import domain.Name;
import service.ByeService;

public class ByeServiceImpl implements ByeService {
    public String sayBye(Name name) {
        return "Bye " + name.getFirstName() + " " + name.getLastName();
    }
}

HelloServiceImpl
Код

package serviceImpl;

import domain.Name;
import service.HelloService;

public class HelloServiceImpl implements HelloService {

    public String sayHello(Name name) {

        return "Hello  " + name.getFirstName() + " " + name.getLastName();
    }
}

ОГ.  Теперь нужен бин (java класс) в котором обьявим геттеры и сеттеры, а также метод который будет отвечать, за то, что будет вызываться, либо Hello либо Bye. И положим его в пакет bean
HelloBean
Код

package bean;

import java.util.Calendar;

import domain.Name;
import service.ByeService;
import service.HelloService;

public class HelloBean {

    public Name name;
    public HelloService helloService;
    public ByeService byeService;
    public void setHelloService(HelloService helloService) {
        this.helloService = helloService;
    }

         //  Геттеры сеттеры 
    public void setByeService(ByeService byeService) {
        this.byeService = byeService;
    }

    public Name getName() {
        return name;
    }

    public void setName(Name name) {
        this.name = name;
    }

    // Главный метод, собственно он и будет генерировать вызов методов, в данном случае в зависимости от текущего времени 
         public String wishMe(Name name) {
        Calendar calendar = Calendar.getInstance();
        if(calendar.get(Calendar.HOUR_OF_DAY) <  12){
            return helloService.sayHello(name);
        } else {
            return byeService.sayBye(name);
        }
    }

}

Это тоже сделанно. 
Далее. Далее самое интересное  smile   Нужно законфигурять все бины.  Как правило, вся конфигурация происходит в .xml  файле. Собственно когда спринг запустится, то ApplicationContext  либо  BeanFactory будут загружать этот файл и смотреть, каким образом связанны все бины между собой. 
hello.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans> <!--  Главный тег, говорящий о том, чтот тут будет происходить маппинг бинов-->
    <bean id="helloBean" class="bean.HelloBean">   <!-- Обьявление первого бина. 
Присваеваем id (произвольно, это то как его будем потом вызывать) 
и указываем где он находится, т.е. пишем полный путь к классу-->

        <property name="helloService"> <!--  инъектим   helloService   через  helloService  интерфейс-->
            <ref bean="helloService"/>
        </property>
        <property name="byeService">
            <ref bean="byeService"/>
        </property>
    </bean>

    <bean id="helloService" class="serviceImpl.HelloServiceImpl"/>   <!--  обьявление 2-го  бина  -->
    <bean id="byeService" class="serviceImpl.ByeServiceImpl"/>   <!--  обьявление  3-го бина --> 

</beans>

Необходим класс  Name  который  будет устанавливать имена и получать 
Name.java
Код

package domain;

public class Name {
    public String firstName;
    public String lastName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

Ну а вот и сам класс, который является сердцем  спринга  smile  Следует заметить, что в этом классе не создаются обьекты сервисов HelloService и ByeService их создание вынесенно в сам фрэймворк
Код

package client;

import bean.HelloBean;
import domain.Name;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestClient {
    public static void main(String[] args) {
        try {
            System.out.println("TestClient started");
                        // Загружаем  конфигурационный файл  через  ApplicationContext  
            ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
                    new String[] { "hello.xml" });  

            System.out.println("Classpath loaded");

                        //  Доступ ко спрингу через   getBean()   метод 
            HelloBean helloBean = (HelloBean) appContext.getBean("helloBean");

                        // Тут все понятно и не сложно догадаться, что происходит 
            Name name = new Name();
            name.setFirstName("Tony");    
            name.setLastName("Greg");
            String str = helloBean.wishMe(name);

            System.out.println(str);
            System.out.println("TestClient end");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Вывод:
Spring отличный фреймворк, позволяет писать понятные и простые приложения (как  J2EE  так  и J2SE).  Чем он хорош ? В данном примере, хорош тем, что создание обьектов не привязанно к самому классу, а происходит в самом фреймворке.  Через  ApplicationContext происходят все инъекции, и все очень замечательно конфигурируется... 
Вот, надеюсь кому - то этот пример с пояснениями поможет  smile    
ссылко 
PM MAIL   Вверх
Kangaroo
Дата 8.5.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Samotnik, молодец! Что-то тебя последнее время на статьи потянуло, хорошее начинание smile

А по сабжу стоит добавить, что приведенный пример показывает только ядро Спринга - IOC/Dependency Injection container для JavaSE.
Основное же применения Спринга - это веб приложения, он отлично интегрируется со многими Java EE технологиями.


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 8.5.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



дык да конечно,  Spring ориентирован больше на WEB  Java  
И должно в полной мерене применяться  MVC  интернационализация, валидация,  Hibernate, ..  и  т.д.  я  тут хоте показать сам принцип работы, т.е. как это вообще происходит и  с чем это едят, а от этого уже можно прыгать дальше и выше и больше   smile 
  
Цитата(Kangaroo @  8.5.2008,  20:24 Найти цитируемый пост)
то приведенный пример показывает только ядро Спринга - IOC/Dependency Injection container для JavaSE.

Дык да, я поэтому в раздел Java:общие вопросы  и поместил. Было бы web  поместил бы в J2EE    smile 
PM MAIL   Вверх
Shaggie
Дата 8.5.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Samotnik, рискуешь заполучить первый джавный плюс, так держать!  smile 

Однако вот это смутило:
Цитата(Samotnik @  8.5.2008,  21:10 Найти цитируемый пост)
это оффициальный сайт.  Но к сожалению маленького примерчика с обьяснениями я так и не нашел.

Как же так? Вот ссылка на подробное описание создания веб-приложения в полном MVC, настоятельно рекомендую к ознакомлению - даёт хорошую базу и мощный пинок к дальнейшему самостоятельному изучению.

Это сообщение отредактировал(а) Shaggie - 13.10.2008, 12:10


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
v2v
Дата 8.5.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Shaggie, не внимательно читал пример.
Самотник рассматривает не только Spring Web MVC  , а Spring в целом.


--------------------
PM   Вверх
Kangaroo
Дата 8.5.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(Shaggie @  8.5.2008,  22:32 Найти цитируемый пост)
Вот ссылка на подробное описание создания веб-приложения в полном MVC, настоятельно рекомендую к ознакомлению - даёт хорошую базу и мощный пинок к дальнейшему самостоятельному изучению.

Да... через эту ссылку я тоже прошел и всех учеников послал туда  smile 

Документация Спринга очень хорошая, ее можно на офсайте найти.


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 8.5.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Shaggie,   т.е. по твоему это простой пример ?    smile 
К тому же статья выложена в разделе Java:общие вопросы  а не в J2EE 
И попытался этим примером показать работу спринга ВОБЩЕМ....  smile 

Это сообщение отредактировал(а) Samotnik - 9.5.2008, 00:20
PM MAIL   Вверх
Shaggie
Дата 9.5.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Цитата(Samotnik @  9.5.2008,  00:05 Найти цитируемый пост)
Shaggie,   т.е. по твоему это простой пример ?

Да. Есть возражения?

Цитата(v2v @  9.5.2008,  00:02 Найти цитируемый пост)
Shaggie, не внимательно читал пример.
Самотник рассматривает не только Spring Web MVC  , а Spring в целом.

Это, я так понимаю, краткое перечисление компонент в начале статьи? Потому что пример демонстрирует исключительно IoC, - согласен, очень доступно, - но на "Spring в целом" не тянет.

Цитата(Samotnik @  9.5.2008,  00:05 Найти цитируемый пост)
К тому же статья выложена в разделе Java:общие вопросы  а не в J2EE

Заодно присоединюсь к мнению Kangaroo о корректности выкладывания статьи про Spring в общих вопросах. Признаться, никогда не слышал о его использовании не в энтерпрайз приложениях, в основном под них всё заточено.

Прошу прощения, если кого вдруг обижу или неприятно удивлю, но мне настолько простого примера явно маловато. Возможности Spring'а в нём практически неощутимы на вкус, нет внятного стимула к изучению.

Мир! Всем мир! Я просто подивился цитате "это оффициальный сайт.  Но к сожалению маленького примерчика с обьяснениями я так и не нашел", и выложил тот самый примерчик, так сказать, обелил официальный сайт создателей Spring. С большим нетерпением жду от Samotnik дальнейших статей.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Samotnik
Дата 9.5.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Shaggie,  што ты хочеш ??  
Не нравицца не читай!   smile  
[censored 2] , выложи сам получше чего нибудь....
Вот у нас всегда такая система... все сидят  тихо, никто ничего не говорит, КАК только что-то новенькое появится, люди сразу от куда не возьмись появляются и начинают критиковать из-под тяжка, при том, что сами нифига  конкретного не предлагают ! 

Это сообщение отредактировал(а) tux - 10.5.2008, 02:06
PM MAIL   Вверх
Kangaroo
Дата 9.5.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Samotnik, зря ты так. Конструктивная критика только помогает. 

А так - в бан. И правильно. Плохое настроение не является оправданием наезда на людей.


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 9.5.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Kangaroo @  9.5.2008,  23:40 Найти цитируемый пост)
 Плохое настроение не является оправданием наезда на людей.

какое настроение ??
ты видел что он мне написал ?
Это низко и подло, выдезти из-за угла, написать сообщение в котором унизил все мои труды. и обратно залезть в свою конуру, при том, что сам ничего не сказал по делу! 
Я не навижу таких недалеких людей !
Разве это по мужски ? 


Это сообщение отредактировал(а) Samotnik - 9.5.2008, 23:50
PM MAIL   Вверх
Maksym
Дата 10.5.2008, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Samotnik
Это форум, в котором общаются на профессиональные тематики. Молодец, что написал статью, я с интересом с ней ознакомился.
Очень плохо, что перешел на личности и нецензурную брань какой бы ни была твоя причина, это крайне непрофессоинально, совершенно не к месту и никому эти эмоции здесь не интересны, для эмоций есть флеймовые разделы форума. Особенно если учесть, что замечания Shaggie были во многом по делу и должны были стать толчком к развитию статьи (кстати, по-моему тема тоже тема для Java2EE раздела, была.. до последних высказываний..)

Твоя реакция совершенно неадекватна и не соответствует духу форума.
PM MAIL   Вверх
Samotnik
Дата 10.5.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Maksym,  Тебе спасибо, за то, что оценил, что я делал  smile  
Как ты думаеш,
Цитата(Shaggie @  9.5.2008,  22:00 Найти цитируемый пост)
 С большим нетерпением жду от Samotnik дальнейших статей.

Вот это вот адекватно ? Это профессионально ? Это соответсвует данному разделу ?    smile 

Это сообщение отредактировал(а) Samotnik - 10.5.2008, 00:06
PM MAIL   Вверх
Maksym
Дата 10.5.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Samotnik
Более чем, что в этом странного. Мне тоже будет интересно почитать если напишешь. Особенно про Spring MVC, поскольку много работаю с веб.
Неадекватен мат, неадекватны эмоции в профессиональном споре.
PM MAIL   Вверх
Samotnik
Дата 10.5.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Maksym @  10.5.2008,  00:07 Найти цитируемый пост)
неадекватны эмоции в профессиональном споре.

Так в том-то и дело, Макс, спора ведь нету  smile,  я всегда с удовольствием вступаю с адеватными и умными людьми в дебаты и споры, всегда можно что-то обсудить, найти правду  smile  
Но ведь согласись, со стороны Shaggie,  были только шишки в мою сторону, ничего пазитивного, он тока говорил о том, что я не внимателен, не то пишу, не так думаю,  не так сижу.  А сам что сделал?  
Он тока облил меня грязью, сам ничего конкретного и путного не предложил. Ведь можно было в другой форме мне сказать о чем нибудь, мы бы с ним обсудили, я бы что-нибудь поправил  smile  

Это сообщение отредактировал(а) Samotnik - 10.5.2008, 00:17
PM MAIL   Вверх
Maksym
Дата 10.5.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Samotnik
Это уже офтоп. Просто возьми на заметку то что я написал.

По теме. Всем интересующимся Spring советую начинать знакомстово с изучения паттерна IoC.
PM MAIL   Вверх
Samotnik
Дата 10.5.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



окей, я считаю, что шэгги поступил не красиво! можно было о всех недачетах сказать в более мягкой форме, потому что критиков, которые тупо грязью поливают, очень много, а вот людей с кем можно поговорить и обсудить - очень мало  smile 
PM MAIL   Вверх
Shaggie
Дата 10.5.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Samotnikу я отвечу в ПМ. Модераторам: извините за неумышленное раздувание пожара, я такой реакции совершенно не ожидал smile


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
javastic
Дата 13.5.2008, 10:29 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: нет
Всего: 27




 ! 
javastic
УВАЖАЕМЫЕ!  Давайте без эмоций и прекратим этот спор. Все же взрослые люди.



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.