Понимание базовых Spring Framework и Total Flow

Я новичок в Spring Framework. Пожалуйста, ознакомьте меня с базовым пониманием весны. Я знаю Java и JSF, но я ничего не знаю о Struts или других фреймворках. Я искал в Интернете и смог загрузить PDF, но я не понимаю поток Spring, как я понимаю поток JSF. Пожалуйста, предоставьте мне ссылки для простого способа понять течение Spring.

3 ответа

Решение

Я новичок в Spring Framework тоже. До сих пор приведенный ниже документ является самым основным. Я тоже читаю это, надеюсь, это поможет вам.

Введение в Spring Framework

  • Переход 1 - Пользователь отправляет запрос на сервер, отправляя форму / нажимая гиперссылку и т. Д. Первоначально запрос передается в WEB.XML.
  • Переход 2 - WEB.XML направляет запрос в DispatcherServlet, посмотрев на тег.
  • Переход 3 - Внутри DispatcherServlet, первый "HandlerMapping" передал запрос подходящему "Controller".
  • Переход 4 - Контроллер отображает запрос в соответствующий класс Model. Вся бизнес-логика выполняется внутри класса Model.
  • Переход 5 - Если требуется операция с базой данных, то класс Model перенаправит запрос в подходящий DAO. Все операции с базой данных должны выполняться в DAO.
  • Transition6 - при необходимости затем прикрепить атрибуты в область запроса / сеанса / приложения и вернуться обратно в модель.
  • Переход 7. Если необходимо, добавьте атрибуты в область запроса / сеанса / приложения и вернитесь обратно в контроллер.
  • Переход 8 - Контроллер просто возвращает его любому представлению (JSP/HTML и т. Д.).
  • Переход 9 - JSP/Html просматривается для пользователя.

Поток приложений Spring MVC:

Я новичок в весне тоже, и время назад был похожий вопрос. Прежде всего, я хочу порекомендовать вам книгу "Весна в действии" Крейга Уоллса, я нашел ее очень полезной и простой для понимания, а также http://www.tutorialspoint.com/spring/ помогла мне разобраться во многих вещах. Если я правильно понял ваш вопрос, то мы можем разделить "поток Spring" на жизненный цикл контейнера Spring IoC и Spring bean. Вот очень небольшой обзор с примером жизненного цикла бобов Spring. Бин проходит несколько этапов между созданием и уничтожением в контейнере Spring. Эти шаги:

  1. иллюстрировать примерами
  2. Заполните свойства
  3. BeanNameAware`s setBeanName ()
  4. BeanFactoryAware`s setBeanFactory
  5. ApplicationContextAware`s setApplicationContext ()
  6. Предварительная инициализация BeanPostProcessors
  7. InitializingBe`s afterPropertiesSet()
  8. Вызвать пользовательский метод init
  9. Постинициализация BeanPostProcessors
  10. Disponsable Бин разрушить
  11. Вызвать пользовательский метод destroy

Каждый шаг предоставляет свои возможности для настройки. Вот код, который просто "отслеживает" жизнь бина:

Для бобов класса A:

public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{

    private String messageA;

    public ClassA() {
        System.out.println("ClassA: default constructor called.");
    }

    public void customInitMethod(){
        System.out.println("ClassA: customInitMethod() method called.");
    }

    public void customDestroyMethod(){
        System.out.println("ClassA: customDestroyMethod() method called.");

    }

    public String getMessageA() {
        System.out.println("ClassA: message get method called.");
        return messageA;
    }

    public void setMessageA(String message) {
        System.out.println("ClassA: message set method called.");
        this.messageA = message;
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
    }

    public void destroy() throws Exception {
        System.out.println("ClassA: destroy() called because DisposableBean interface.");
    }

    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        System.out.println("ClassA: application context set: " + arg0.getApplicationName());
    }

    public void setBeanFactory(BeanFactory arg0) throws BeansException {
        System.out.println("ClassA: beanFacrory set.");
    }

    public void setBeanName(String arg0) {
        System.out.println("ClassA: bean name set: " + arg0);
    }

}public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{

    private String messageA;

    public ClassA() {
        System.out.println("ClassA: default constructor called.");
    }

    public void customInitMethod(){
        System.out.println("ClassA: customInitMethod() method called.");
    }

    public void customDestroyMethod(){
        System.out.println("ClassA: customDestroyMethod() method called.");

    }

    public String getMessageA() {
        System.out.println("ClassA: message get method called.");
        return messageA;
    }

    public void setMessageA(String message) {
        System.out.println("ClassA: message set method called.");
        this.messageA = message;
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
    }

    public void destroy() throws Exception {
        System.out.println("ClassA: destroy() called because DisposableBean interface.");
    }

    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        System.out.println("ClassA: application context set: " + arg0.getApplicationName());
    }

    public void setBeanFactory(BeanFactory arg0) throws BeansException {
        System.out.println("ClassA: beanFacrory set.");
    }

    public void setBeanName(String arg0) {
        System.out.println("ClassA: bean name set: " + arg0);
    }

}

Для CustomPostProcessor:

public class CustomPostProcessor implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("CustomPostProcessor: beforeInitialization on: "
                + beanName);
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("CustomPostProcessor: afterInitialization on: "
                + beanName);
        return bean;
    }

}

В основном классе мы создаем ApplicationContext, получаем бин и выводим сообщение:

public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext(
                "META_INF/spring/app-context.xml");

        ClassA objA = (ClassA) context.getBean("classA");

        System.out.println(objA.getMessageA());

        context.registerShutdownHook();
    }

В app-context.xml мы имеем:

<bean id="classA" class="ClassA" init-method="customInitMethod"
        destroy-method="customDestroyMethod">
    <property name="messageA" value="messagA: Hello Spring!" />
</bean>

<bean class="CustomPostProcessor" />

Как я понимаю, выходные строки соответствуют этапам жизненного цикла следующим образом:

  • 1.Instantiate

ClassA: вызывается конструктор по умолчанию.

  • 2. Свойства населения

ClassA: вызван метод набора сообщений.

  • 3.BeanNameAware`s setBeanName ()

ClassA: набор имен бинов: classA

  • 4.BeanFactoryAware`s setBeanFactory

Класс A: набор beanFacrory.

  • 5.ApplicationContextAware`s setApplicationContext ()

ClassA: контекст приложения установлен:

  • 6. Предварительная инициализация BeanPostProcessors

CustomPostProcessor: beforeInitialization для: classA

  • 7.InitializingBeans afterPropertiesSet ()

ClassA: afterPropertiesSet () вызван из-за интерфейса InitializingBean.

  • 8. вызвать пользовательский метод init

ClassA: вызван метод customInitMethod().

  • 9.Пост-инициализация BeanPostProcessors

CustomPostProcessor: afterInitialization on: classA

  • Программа печатает сообщение

ClassA: вызван метод получения сообщения. messagA: Привет, весна!

  • 10. Ответственный уничтожить

ClassA: destroy() вызывается из-за интерфейса DisposableBean.

  • 11.Call пользовательский метод уничтожения

ClassA: вызван метод customDestroyMethod().

Другие вопросы по тегам