Spring 中的无状态服务层
Stateless Service Layer in Spring
最近我在做一个 Web 项目,我只想澄清一些关于 Spring bean 范围的事情以及基于 Spring 的开发的最佳实践。这里我使用了一个使用示例代码的场景
我有一个网络控制器如下
@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 class 无状态,这样我就可以将 JobService 定义为单例,从而减少不必要的对象创建。根据我的理解,为了使 class 无状态,我们不想保留实例 properties.In 在这种情况下,我将不同的作业对象传递给服务。这是否会使这个 JobService 有状态,因为 JObservice 处理不同的不同作业对象?你能帮我理解一下吗
谢谢,
凯斯
传递不同的对象不会使您的服务有状态。
以这个为例。
@Service
Public class JobService {
private Job currentJob;
public void setJob(Job job) {
currentJob = job;
}
public void run(){
-- perform the business logic on currentJob
}
}
这会使 bean 'stateful' 并导致无法解释的行为。
多个controller/threads在你的单例中执行该方法不会发生冲突,可以认为是安全的。
最近我在做一个 Web 项目,我只想澄清一些关于 Spring bean 范围的事情以及基于 Spring 的开发的最佳实践。这里我使用了一个使用示例代码的场景
我有一个网络控制器如下
@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 class 无状态,这样我就可以将 JobService 定义为单例,从而减少不必要的对象创建。根据我的理解,为了使 class 无状态,我们不想保留实例 properties.In 在这种情况下,我将不同的作业对象传递给服务。这是否会使这个 JobService 有状态,因为 JObservice 处理不同的不同作业对象?你能帮我理解一下吗
谢谢, 凯斯
传递不同的对象不会使您的服务有状态。
以这个为例。
@Service
Public class JobService {
private Job currentJob;
public void setJob(Job job) {
currentJob = job;
}
public void run(){
-- perform the business logic on currentJob
}
}
这会使 bean 'stateful' 并导致无法解释的行为。
多个controller/threads在你的单例中执行该方法不会发生冲突,可以认为是安全的。