本文介绍了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,因为最有可能需要向其注入
EntityManager
或JdbcTemplate
- Controller,因为它是Spring-MVC的一部分,您需要将它定义为一个bean,以便您可以在其方法上使用
@RequestMapping
/@GetMapping
/@PostMapping
/@PutMapping
/@DeletMapping
/@PatchMapping
等。 - 服务类,因为您需要将其注入到控制器中,并且需要使用
@Transactional
来管理其方法的DB事务。
对于DTO,大多数情况下您可以自己创建,因为它本质上只是一个数据容器,不需要使用任何Spring特性。
需要考虑的第二件事是bean的作用域应该是什么。您主要需要考虑该类的一个实例是否可以由多个请求(即线程)同时安全地执行。如果是,您可以简单地使用默认的单例作用域。如果没有,您可以考虑是否希望每个HTTP请求(即@RequestScope
)或每个HTTP会话(即@SessionScope
)都有自己的该类实例。例如,如果您正在实现某个购物车,您很可能希望HTTP会话拥有购物车的Won实例,因此您应该对购物车使用@SessionScope
。 这篇关于Spring类的标准作用域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!