繁体   English   中英

了解基本的Spring框架和总流程

[英]Understanding basic Spring Framework and Total Flow

我是Spring框架的新手。 请指导我有关Spring的基本知识。 我知道Java和JSF,但对Struts或其他框架一无所知。 我已经搜索了Internet并能够下载PDF,但是我不了解Spring流程,就像我了解JSF流程一样。 请为我提供链接,以一种简单的方式了解Spring的流程。

  • 过渡1 –用户通过提交表单/单击超链接等将请求发送到服务器。最初将请求提供给WEB.XML。
  • 过渡2 – WEB.XML通过查看标记将请求路由到DispatcherServlet。
  • 转换3 –在DispatcherServlet内部,第一个“ HandlerMapping”将请求移交给合适的“ Controller”。
  • 过渡4 –控制器将请求映射到适当的Model类。 所有BUSINESS LOGIC都在Model类内部完成。
  • 过渡5 –如果需要数据库操作,则Model类会将请求路由到适当的DAO。 所有数据库操作都应在DAO中进行。
  • Transition6 –如果需要,则将属性附加到请求/会话/应用程序范围中,然后返回到Model。
  • 过渡7 –如果需要,则将属性附加到请求/会话/应用程序范围中,然后返回到Controller。
  • 过渡8 –控制器仅将其返回到任何视图(JSP / HTML等)。
  • 过渡9 – JSP / HTML向用户查看。

Spring MVC应用程序流程:

我也是Spring Framework的新手。 到目前为止,以下文档是最基本的文档。 我也在阅读,希望它能对您有所帮助。

Spring框架介绍

我也是Spring的新手,以前有类似的问题。 首先,我想向您推荐Craig Walls撰写的“ Spring in Action”一书,我发现它非常有用且易于理解,并且http://www.tutorialspoint.com/spring/帮助我弄清楚了很多事情。 如果我正确理解了您的问题,那么我们可以将“ Spring的流程”划分为Spring IoC容器和Spring Bean的生命周期。 这是关于Spring bean生命周期的一个非常小的概述。 在Spring容器中,bean在创建和销毁之间经历了几个步骤。 这些步骤是:

  1. 实例化
  2. 填充属性
  3. BeanNameAware的setBeanName()
  4. BeanFactoryAware的setBeanFactory
  5. ApplicationContextAware的setApplicationContext()
  6. 预初始化BeanPostProcessors
  7. InitializingBean的afterPropertiesSet()
  8. 调用自定义初始化方法
  9. 后初始化BeanPostProcessors
  10. DisponsableBean的毁灭
  11. 调用自定义销毁方法

每个步骤都提供了自己的定制机会。 以下是一些简单地“跟踪” bean生命的代码:

对于豆类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,获取bean并输出消息:

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.实例化

ClassA:调用默认构造函数。

  • 2.人口属性

ClassA:调用消息集方法。

  • 3.BeanNameAware的setBeanName()

ClassA:bean名称集:classA

  • 4.BeanFactoryAware的setBeanFactory

ClassA:beanFacrory集。

  • 5.ApplicationContextAware的setApplicationContext()

ClassA:应用程序上下文集:

  • 6,预初始化BeanPostProcessors

CustomPostProcessor:beforeInitialization上:classA

  • 7,初始化Bean的afterPropertiesSet()

ClassA:afterPropertiesSet()被调用,因为有InitializingBean接口。

  • 8,调用自定义的初始化方法

ClassA:调用customInitMethod()方法。

  • 9,初始化后的BeanPostProcessors

CustomPostProcessor:afterInitialization于:classA

  • 程序打印消息

ClassA:消息的get方法被调用。 messagA:你好,春天!

  • 10,DisablesableBean的毁灭

ClassA:因为DisposableBean接口而调用destroy()。

  • 11,调用自定义销毁方法

ClassA:调用customDestroyMethod()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM