对于基于 Spring 的 Java Web 应用程序,如何使用 Spring beans 高效地构造控制器、服务、DAO 类?
目前我的结构是这样的
TestController.class
(原型范围)→ TestAPI.class
(原型范围)→ TestService.class
(单例范围,即默认)
我在
TestService.class
中使用了 Singleton 作用域,因为它只包含 utils。
这是正确的做法还是我应该使用基于线程、会话的范围? 业界对此的普遍做法是什么?
一般来说,除非绝对必要,否则您应该始终选择单例范围。事实上,通常很少使用任何其他类型的范围,并且仅在非常特殊的情况下才会使用。
在决定范围时,您应该始终问的问题是“该对象需要维持什么状态?”。一般来说,答案应该是“无”。只要有可能,您就应该始终争取无状态 bean。但是,如果您希望能够将某种状态注入到对象中,那么问题是,该状态的范围是什么?例如,此状态的范围是否仅限于请求、是否仅限于方法的特定调用、是否仅限于用户会话?
话虽如此,默认情况下始终应该使组件无状态,并且仅在必要或有利时才偏离此设置。