这些天我正在开发一个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定义为singleton,从而减少不必要的对象创建。按照我的理解,按顺序使类无状态,我们不想保留实例属性。在这种情况下,我将不同的Job对象传递给服务。这是否使这个JobService状态良好,因为JObservice处理不同的不同作业对象?你能帮我理解吗
谢谢, Keth
答案 0 :(得分:1)
传递不同的对象并不会使您的服务处于有状态。
以此为例。
@Service
Public class JobService {
private Job currentJob;
public void setJob(Job job) {
currentJob = job;
}
public void run(){
-- perform the business logic on currentJob
}
}
这会让豆子变得有状态。并导致无法解释的行为。
多个控制器/线程在单例中执行方法不会发生冲突,可以认为是安全的。