Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解基本Spring框架和总流程_Spring_Spring 3_Springsource_Spring2.x - Fatal编程技术网

了解基本Spring框架和总流程

了解基本Spring框架和总流程,spring,spring-3,springsource,spring2.x,Spring,Spring 3,Springsource,Spring2.x,我不熟悉Spring框架。请指导我对Spring的基本理解。我知道Java和JSF,但我对Struts或其他框架一无所知。我已经在互联网上搜索过,并且能够下载一个PDF文件,但是我不理解Spring流,就像我理解JSF流一样。请为我提供一些链接,让我了解Spring的流程。我也是Spring框架的新手。 到目前为止,以下文件是最基本的文件。我也在读,希望能对你有所帮助 我也是春天的新手,很久以前也有类似的问题。首先,我想向你们推荐克雷格·沃尔斯的《春天在行动》一书,我发现它非常有用,也很容易理解

我不熟悉Spring框架。请指导我对Spring的基本理解。我知道Java和JSF,但我对Struts或其他框架一无所知。我已经在互联网上搜索过,并且能够下载一个PDF文件,但是我不理解Spring流,就像我理解JSF流一样。请为我提供一些链接,让我了解Spring的流程。

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


我也是春天的新手,很久以前也有类似的问题。首先,我想向你们推荐克雷格·沃尔斯的《春天在行动》一书,我发现它非常有用,也很容易理解 帮我弄明白了很多事情。如果我正确理解了你的问题,那么我们可以将“Spring流”划分为Spring IoC容器和Spring bean的生命周期。这里是关于Springbean生命周期的一个非常小的概述。在春天,一个bean在创建和销毁之间经历了几个步骤 容器。这些步骤是:

  • 实例化
  • 填充属性
  • BeanNameAware的setBeanName()
  • BeanFactoryAware的setBeanFactory
  • ApplicationContextAware的setApplicationContext()
  • 预初始化BeanPostProcessors
  • 初始化Bean的AfterPropertieSet()
  • 调用自定义init方法
  • 初始化后BeanPostProcessors
  • DisponsableBean的销毁
  • 调用自定义销毁方法
  • 每个步骤都提供了自己的定制机会。下面是一些简单“追踪”bean生活的代码:

    对于bean ClassA:

    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;
        }
    
    }
    
    在main类中,我们创建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
    A类:豆制品套装

    • 5.ApplicationContextAware的setApplicationContext()
    ClassA:应用程序上下文集:

    • 6.预初始化BeanPostProcessors
    CustomPostProcessor:在初始化之前在:classA上

    • 7.初始化Bean的AfterPropertieSet()
    ClassA:AfterPropertieSet()被调用,因为初始化了Bean接口

    • 8.调用自定义init方法
    ClassA:调用了customInitMethod()方法

    • 9.初始化后BeanPostProcessors
    CustomPostProcessor:afterInitialization on:classA

    • 程序打印消息
    ClassA:调用了消息获取方法。 迈萨加:你好,春天

    • 10.DisponsableBean的销毁
    ClassA:destroy()被调用,因为DisposableBean接口

    • 11.调用自定义销毁方法
    ClassA:调用customDestroyMethod()方法。

    • 转换1–用户通过提交表单向服务器发送请求 单击超链接等。请求最初提供给WEB.XML
    • 转换2–WEB.XML通过查找将请求路由到DispatcherServlet 在标签上
    • 过渡3–内部DispatcherServlet, 第一个“HandlerMapping”将请求移交给合适的“控制器”
    • 转换4–控制器将请求映射到适当的模型类。全部的 业务逻辑在模型类中完成
    • 转换5–If数据库 需要操作,然后模型类将请求路由到合适的 刀。所有数据库操作都应该在DAO中执行
    • 转换6–如果需要,将属性附加到请求/会话/应用程序中 范围并返回到模型
    • 过渡段7–如果需要,则连接 将属性放入请求/会话/应用程序范围并返回到 控制器
    • 转换8–控制器只需将其返回到任何视图 (JSP/HTML等)
    • 转换9–JSP/Html将返回给用户查看

    谢谢,我确实有那份文档,开始的时候很好,但接下来,我觉得有点不对劲,所以我想问一下,可能是我们看了三遍就能明白了,我想soo,无论如何,谢谢你,伙计。嗨,又是我。当我完全被国际奥委会和AOP这样的术语弄糊涂的时候,我发现了这个网站,它非常基本和清晰。你读对了这个问题吗?问题在于Spring流,而不是Spring MVC请求-响应流。