问题发现
笔者最近使用Spring装配业务类的时候出现了数据串线的问题,具体是在bussinessA类中设置了几个类参数,并在声明的时候做了初始化,示例如下:
public class MRLaxerServiceImpl implements MRLaxerService {
private ProgramDto programDto = new ProgramDto();
private StringBuffer content = new StringBuffer();
public void String2Object(){
programDto.setName();
...
}
这个业务类和其方法会被多次调用,在笔者测试调用效果时,发现第一次调用完全没有问题,结果为A,第二次调用结果还是A,第三次依然没变,可是三次的输入都是不同的。后来想起spring配置bean的时候会有设置scope,笔者的设置为
<bean id="MRLaxerServiceImpl" class="org.sklse.mr.bussinessService.MRLaxerServiceImpl">
</bean>
没有显示的设置为scope,而Spring规定默认的scope为single,即为单例模式。也就是说不同的请求都是同一个bean实例在处理,处理的结果因此没有根据输入的不同而产生变化。此处可以添加scope="prototype"
,表示每次的请求都会产生新的实例来处理。