【发布时间】:2018-05-04 22:19:15
【问题描述】:
这些天我在做一个 Web 项目,我只想澄清一些关于 Spring bean 范围和基于 Spring 的开发的最佳实践的事情。这里我使用的是一个使用示例代码的场景
我有一个如下的 Web 控制器
@Controller
Public class JobController{
private JobService jobService;
@Autowired
public void setJobService(JobService jobService ) {
this.jobService = jobService ;
}
public void run(){
Job job = new Job();
-- Setting the properties for the Object
jobService.run(job);
}
}
然后我有如下服务
@Service
Public class JobService {
public void run(Job job){
-- perform the business logic
}
}
在这里,我想使 JobService 类无状态,因此我可以将 JobService 定义为单例,从而减少不必要的对象创建。根据我的理解,按顺序使类无状态,我们不想保留实例属性。在这种情况下,我将不同的 Job 对象传递给服务。这是否使这个 JobService 有状态,因为 JObservice 处理不同的不同作业对象?你能帮我理解吗
谢谢, 凯斯
【问题讨论】:
-
默认情况下,在 Spring 中,所有 spring bean 都是单例的,除非另有说明。所以如果你在 JobService 上默认有 @Service 它是一个单例
-
@pvpkiran 感谢您的回复。是的,Spring bean 默认是单例的。但是我们是否需要将服务类内部的逻辑控制为单例。即使我们标记为单例,开发者有什么办法可以违反单例行为?
标签: spring spring-bean stateless service-layer