【问题标题】:How Are @Controller, @Service objects managed in spring MVC by annotation?Spring MVC中@Controller、@Service对象是如何通过注解管理的?
【发布时间】:2013-12-08 21:53:08
【问题描述】:

Spring容器实例化的Spring beans默认是singleton beans...datasource, sessionFactory通过spring xml实例化的都是singleton 当我使用@Controller、@Repository、@Service,创建对象。

如果该名称仅创建一个对象,如何同时处理向 Spring MVC 应用程序发送请求的用户?它们是否由相同的对象处理

这些请求是否由 spring 控制器/服务单例对象控制/服务?如果是的话,我猜它可能会导致混乱......

作为 STRUTS2 中的并行,有一个 创建单独对象的值堆栈。 SPRING MVC/Annotation 中是否有类似的概念???

这听起来很基本,但就我搜索 spring 网站/stackoverflow 而言,我还没有遇到可以解释这方面的东西。

请对此有所了解..

【问题讨论】:

  • 是的,相同的对象处理所有用户的请求(只要只有JVM实例)。这不会“搞砸”,因为大多数控制器是无状态的或只读的(即它们不修改自己的状态)并将请求和用户信息保存在专用对象中。这个问题是关于 java servlet 如何工作的,因为这不是 Spring 特定的,请参阅 stackoverflow.com/questions/3106452/… 所以是的,控制器和存储库可能会存在数周甚至数月,直到关闭。
  • @BorisTreukhov 当您提到“这是关于 java servlet 的工作”时,控制器或服务类是否扩展了 HttpServlet?控制器注释只是提到该类充当控制器的角色。
  • 不,控制器不扩展 HttpServlet,但 Spring DispatcherServlet 可以(它实现了前端控制器设计模式)它有自己的 Spring 上下文(一组对象)并将请求处理委托给这个对象上下文(实际上是映射器类,然后将处理委托给@Controller 注释的bean)。

标签: spring model-view-controller annotations


【解决方案1】:

考虑以下示例

public class Driver {
    public static void main(String[] args) {
        Controller controller = new Controller();
        Thread t1 = new Thread(new Example(controller));
        Thread t2 = new Thread(new Example(controller));
        t1.start();
        t2.start();
    }

    public static class Example implements Runnable {
        private Controller controller;
        public Example(Controller controller) {
            this.controller = controller;
        }
        @Override
        public void run() {
            controller.doSomething();
        }       
    }

    public static class Controller {
        public void doSomething() {
            System.out.println("hello world");
        }
    }
}

只有一个Controller 对象。它在Threads t1t2 之间共享。这不是问题,因为Controller 在其doSomething() 方法中使用的所有数据都是本地的,没有任何东西是共享的。

同样,在 Spring Web 应用程序中,您将有一个 @Controller 类的单个实例,它不应该有任何成员变量。当请求到达时,Servlet 容器将调度一个Thread 来执行DispatcherServlet 和您定义的处理程序方法。

【讨论】:

  • 现在我明白了在控制器/服务对象中没有成员变量的重要性。这些类应该只有方法。
猜你喜欢
  • 1970-01-01
  • 2011-02-17
  • 2013-05-18
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多