9

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

4

3 回答 3

9
  • 过渡 1 – 用户通过提交表单/单击超链接等方式向服务器发送请求。请求最初被提供给 WEB.XML。
  • 过渡 2 – WEB.XML 通过查看标记将请求路由到 DispatcherServlet。
  • 过渡 3 - 在 DispatcherServlet 内部,首先“HandlerMapping”将请求移交给合适的“控制器”。
  • 过渡 4 - 控制器将请求映射到适当的模型类。所有业务逻辑都在 Model 类中完成。
  • 过渡 5 – 如果需要数据库操作,那么 Model 类会将请求路由到合适的 DAO。所有的数据库操作都应该在 DAO 中进行。
  • Transition6 – 如果需要,则将属性附加到请求/会话/应用程序范围并返回给模型。
  • 过渡 7 - 如果需要,则将属性附加到请求/会话/应用程序范围并返回给控制器。
  • 过渡 8 - 控制器简单地将其返回给任何视图(JSP/HTML 等)。
  • 过渡 9 – JSP/Html 被查看回给用户。

Spring MVC 应用程序流程:

于 2014-04-23T09:43:20.993 回答
3

我也是 Spring 框架的新手。到目前为止,下面的文档是最基本的文档。我也在读,希望对你有帮助。

Spring框架介绍

于 2012-07-06T09:37:30.087 回答
2

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

  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 on: classA

  • 7.InitializingBean 的 afterPropertiesSet()

ClassA:afterPropertiesSet() 调用是因为 InitializingBean 接口。

  • 8.调用自定义init-method

ClassA:调用 customInitMethod() 方法。

  • 9.Post-initialization BeanPostProcessors

CustomPostProcessor:在初始化后:classA

  • 程序打印消息

ClassA:被调用的消息获取方法。messageA:春天你好!

  • 10.DisponsableBean的销毁

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

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

ClassA:调用 customDestroyMethod() 方法。

于 2013-02-15T21:59:54.387 回答