Spring类的标准作用域 [英] Standard Scope for Spring classes

查看:40
本文介绍了Spring类的标准作用域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Spring MVC应用中,默认情况下所有bean都是单例的,但是根据良好的编程实践,以下类的标准作用域应该是什么:

1.DAO类

2.控制器类

3.DTO类

4.服务类别

我读到DAO和Controller类应该是单例作用域,DTO类不应该是Bean,因此没有注释,只要需要,DTO类就应该使用";new";实例化。

@Service类的作用域是什么?

如果在这两个作用域中均未创建上述类,则哪些类将具有请求和会话作用域?

推荐答案

所以这里基本上要考虑两件事。第一个问题是,如果需要将bean声明为Spring bean。这取决于您是需要使用这个类的Spring特性,如@Transactional@Async@PreAuthorize@Autowired(即依赖注入),还是要确保bean有一定的作用域等。如果不是这样,简单的做法是不将其定义为Spring bean,简单地自己创建。

因此,在大多数情况下,需要以下类型的类才能将它们定义为Spring bean:

  • DAO,因为最有可能需要向其注入EntityManagerJdbcTemplate
  • Controller,因为它是Spring-MVC的一部分,您需要将它定义为一个bean,以便您可以在其方法上使用@RequestMapping/@GetMapping/@PostMapping/@PutMapping/@DeletMapping/@PatchMapping等。
  • 服务类,因为您需要将其注入到控制器中,并且需要使用@Transactional来管理其方法的DB事务。

对于DTO,大多数情况下您可以自己创建,因为它本质上只是一个数据容器,不需要使用任何Spring特性。

需要考虑的第二件事是bean的作用域应该是什么。您主要需要考虑该类的一个实例是否可以由多个请求(即线程)同时安全地执行。如果是,您可以简单地使用默认的单例作用域。如果没有,您可以考虑是否希望每个HTTP请求(即@RequestScope)或每个HTTP会话(即@SessionScope)都有自己的该类实例。例如,如果您正在实现某个购物车,您很可能希望HTTP会话拥有购物车的Won实例,因此您应该对购物车使用@SessionScope

这篇关于Spring类的标准作用域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆