Spring MVC 何时在Spring应用程序中使用请求、会话、应用程序作用域

3lxsmp7m  于 2022-11-14  发布在  Spring
关注(0)|答案(1)|浏览(147)

我已经浏览了Spring中的5.5 Bean Scopes部分,我想知道一些实际的例子,在这些例子中,我们使用requestsessionapplication作用域bean的作用域。
我已经看过这篇文章--〉Spring Bean Scopes,但这只是给出了Spring中作用域的定义。
有人能给予一个例子,在银行应用程序或任何在线机票预订应用程序或在线购物应用程序中,我们可以使用请求,会话,应用程序的范围?

1tuwyuhd

1tuwyuhd1#

我将逐步解释这一点:
Spring Bean的作用域:
| 适用范围|项目名称|
| - -|- -|
| 单例|每个容器创建一个Bean示例(默认情况下)。|
| 原型|每次请求Bean时都会创建新示例。|
| 请求|每个HTTP请求都会创建一个新的Bean示例。|
| 会话|每个HTTP会话的新Bean示例。|
| 应用程序|为每个ServletContext创建一个Bean示例。|
| WebSocket|每个WebSocket有一个Bean示例。|
示例代码:
我已经创建了五个bean来演示范围的所有用例:

单身Bean

@Component
public class SingletonBean {
}

原型Bean

@Component
@Scope("prototype")
public class PrototypeBean {
}

请求Bean

@Component
@RequestScope
public class RequestBean {
}

会话Bean

@Component
@SessionScope
public class SessionBean {
}

应用程序Bean

@Component
@ApplicationScope
public class ApplicationBean {
}

现在,我创建了一个控制器来显示作用域的所有行为:

@RestController
@Scope("prototype")
public class Resource {

    @Autowired
    private SingletonBean singletonBean;

    @Autowired
    private PrototypeBean protoTypeBean;

    @Autowired
    private RequestBean requestBean;

    @Autowired
    private SessionBean sessionBean;

    @Autowired
    private ApplicationBean applicationBean;

    @GetMapping("/testbeans")
    public String index() {
        return "<pre>" + singletonBean + "\n" + protoTypeBean + "\n" + requestBean + "\n" + sessionBean + "\n"
                + applicationBean + "\n" + "</pre>";
    }

}

当您点击端点-http://localhost:8080/dweller/testbeans时,将得到以下输出:

要检查是否创建了具有请求范围的Bean的新示例,只需刷新/发送新请求。

注意:除此之外,还创建了一个具有原型范围的Bean的新示例,新示例的散列码/地址显示在上面的屏幕截图中。

要检查是否创建了一个具有会话作用域的bean的新示例,只需打开一个incognito窗口,点击相同的url。现在您将看到为一个具有会话作用域的bean创建了一个新示例。

要创建单元集和应用程序范围Bean的新示例,必须重新部署应用程序以查看更改。
我认为这个解释足以开始任何项目,因为我已经解释了一个运行代码的基础。我建议从一个演示项目(银行或票据项目,你提到的)开始,实现所有的范围。
我添加了一个real time internet banking system sequence diagram的链接来实现这个流。只要理解用例,并尝试看看在哪里可以添加作用域。

相关问题