Spring中的无状态服务层

时间:2017-11-21 12:38:09

标签: spring spring-bean stateless service-layer

这些天我正在开发一个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

1 个答案:

答案 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
  }
}

这会让豆子变得有状态。并导致无法解释的行为。

多个控制器/线程在单例中执行方法不会发生冲突,可以认为是安全的。