2012-07-06 30 views
7

Soy nuevo en Spring Framework. Por favor, guíame sobre la comprensión básica de Spring. Conozco Java y JSF, pero no sé nada sobre Struts u otros frameworks. He buscado en Internet y he podido descargar un PDF, pero no entiendo el flujo de primavera como entiendo el flujo de JSF. Proporcione enlaces para una forma simple de entender el flujo de Spring.Descripción de Spring Framework básico y flujo total

Respuesta

3

Soy nuevo en Spring Framework también. Hasta ahora, el documento siguiente es el más básico. Lo estoy leyendo también, espero que pueda ayudarte.

Introduction to Spring Framework

+0

Gracias De hecho, tengo que la documentación, empezando era bueno, pero pasando, hay una cierta lackness me sentí así que estoy pidiendo, puede ser si vamos a través de él 3 veces podemos entender que pienso De todos modos, gracias amigo. – user1407297

+0

Hola, soy yo otra vez. Cuando estaba totalmente confundido por términos como IoC y AOP, encontré este sitio y es realmente básico y claro.http: //www.springbyexample.org – POPOL

2

Soy nuevo en primavera y hace demasiado tiempo tuvo pregunta similar. Antes que nada quiero recomendarte el libro 'Spring in Action' de Craig Walls, me pareció muy útil y fácil de entender, también http://www.tutorialspoint.com/spring/ me ayudó a descifrar muchas cosas. Si entendí bien tu pregunta, podemos dividir el "flujo de primavera" en los ciclos de vida del Spring IoC container y Spring Bean. Aquí hay una vista general muy pequeña con un resumen del ciclo de vida de Spring Bean. Un bean pasa por varios pasos entre la creación y la destrucción en el contenedor Spring . Estos pasos son: propiedades

  1. Instantiate
  2. pueblan
  3. BeanNameAware`s setBeanName()
  4. BeanFactoryAware`s setBeanFactory
  5. ApplicationContextAware`s setApplicationContext()
  6. BeanPostProcessors Pre-inicialización
  7. InitializingBean`s afterPropertiesSet()
  8. Call-init método personalizado
  9. BeanPostProcessors post-inicialización
  10. DisponsableBean`s destruyen
  11. llamada destruir método

Cada paso proporciona propias oportunidades para la personalización personalizado. Aquí hay un código que sólo “trazas” bean`s vida:

Para frijol claseA:

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); 
    } 

} 

Para 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; 
    } 

} 

En la clase principal por la que la creación de Application Context, frijol conseguir e impresión mensaje:

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(); 
    } 

en APP-context.xml tenemos:

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

<bean class="CustomPostProcessor" /> 

Según entiendo líneas de salida corresponden a las etapas del ciclo de vida de esta manera:

  • 1.Instantiate

claseA: constructor por defecto llamada.

  • 2.Populate propiedades

ClassA: método mensaje de establecimiento de llamada.

  • 3.BeanNameAware`s setBeanName()

ClassA: nombre del bean conjunto: classA

  • 4.BeanFactoryAware`s setBeanFactory

ClassA: Conjunto beanFacrory.

  • 5.ApplicationContextAware`s setApplicationContext()

ClassA: contexto de aplicación establece:

  • BeanPostProcessors 6.Pre-inicialización

CustomPostProcessor: beforeInitialization en: classA

  • 7.InitializingBean`s afterPropertiesSet()

ClassA: afterPropertiesSet() llamada porque interfaz InitializingBean.

  • 8.Call encargo init-método

claseA: Método customInitMethod() llama.

  • BeanPostProcessors 9.Post-inicialización

CustomPostProcessor: afterInitialization en: classA

Programa
  • imprime mensaje

claseA: método get mensaje de llamada. messagA: ¡Hola primavera!

  • 10.DisponsableBean`s destruir

claseA: destroy() llamada porque la interfaz DisposableBean.

  • 11.Call costumbre destruir método

claseA: Método customDestroyMethod() llama.

7
  • Transición 1 - El usuario envía la solicitud al servidor mediante la presentación de la forma/por clic petición de hipervínculo etc se da inicialmente a web.xml.
  • Transición 2: solicitudes de rutas WEB.XML a DispatcherServlet mirando en la etiqueta.
  • Transition 3 - Inside DispatcherServlet, Primero 'HandlerMapping' entregó la solicitud al 'Controlador' adecuado.
  • Transición 4 - solicitud de mapas del controlador a la clase de modelo adecuada. Todo BUSINESS LOGIC se realiza dentro de la clase Model.
  • Transición 5 - Si se necesita la operación de la base de datos , la clase de modelo encaminará la solicitud al DAO adecuado. Todas las operaciones de la base de datos deben llevarse a cabo en DAO.
  • Transición6 - Si es necesario, adjunte atributos en el alcance solicitud/sesión/aplicación y regrese a Modelo.
  • Transición 7 - Si es necesario, adjunte los atributos en el alcance solicitud/sesión/aplicación y regrese a Controlador.
  • Transición 8 - El controlador simplemente lo devuelve a cualquier Vista (JSP/HTML, etc.).
  • Transition 9 - JSP/Html se visualiza de nuevo al usuario.

Spring MVC Application Flow: