Понимание базовых Spring Framework и Total Flow
Я новичок в Spring Framework. Пожалуйста, ознакомьте меня с базовым пониманием весны. Я знаю Java и JSF, но я ничего не знаю о Struts или других фреймворках. Я искал в Интернете и смог загрузить PDF, но я не понимаю поток Spring, как я понимаю поток JSF. Пожалуйста, предоставьте мне ссылки для простого способа понять течение Spring.
3 ответа
Я новичок в 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 просматривается для пользователя.
Я новичок в весне тоже, и время назад был похожий вопрос. Прежде всего, я хочу порекомендовать вам книгу "Весна в действии" Крейга Уоллса, я нашел ее очень полезной и простой для понимания, а также http://www.tutorialspoint.com/spring/ помогла мне разобраться во многих вещах. Если я правильно понял ваш вопрос, то мы можем разделить "поток Spring" на жизненный цикл контейнера Spring IoC и Spring bean. Вот очень небольшой обзор с примером жизненного цикла бобов Spring. Бин проходит несколько этапов между созданием и уничтожением в контейнере Spring. Эти шаги:
- иллюстрировать примерами
- Заполните свойства
- BeanNameAware`s setBeanName ()
- BeanFactoryAware`s setBeanFactory
- ApplicationContextAware`s setApplicationContext ()
- Предварительная инициализация BeanPostProcessors
- InitializingBe`s afterPropertiesSet()
- Вызвать пользовательский метод init
- Постинициализация BeanPostProcessors
- Disponsable Бин разрушить
- Вызвать пользовательский метод 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().