在struts2的action中注入了service的对象,service是用@Service("userService")注释进行实例化的,那实例化类型是不是必须为@Scope("prototype")这种类型,担心在struts2的多线程、多并发访问的时候在service类的方法中会导致数据混乱(请大家帮我解释一下这点);,因为struts2不是单例的,那是不是service类也必须要是@Scope("prototype"),这样为每个请求都重新创建一个service类的对象,这样才不致于在多线程情况下导致数据可能混乱呢??????
代码如下:
STRUTS2 Action类
public class UserAction extends BaseAction {
private static final long serialVersionUID = -2575509284575823496L;
@Resource(name = "userService")
private UserService userService;
private User user;
private List<Role> roleList;
public String add() throws Exception {
if (CollectionUtils.isEmpty(roleList)) {
addActionError("请选择角色");
return INPUT;
}
user.setRoleSet(new HashSet<Role>(roleList));
userService.createUser(user);
return SUCCESS;
}
}
SERVICE类:
@Scope("") ??????????????????? 这里什么时候用singleton 或者 prototype????????????????????????????????
@Service("userService")
public class UserServiceImpl extends PersistService implements UserService {
public void createUser(User user){
user.setPassword(MD5Utils.MD5Encode(user.getPassword()));
this.getJpaPersistence().persist(user);
}
}
在上面service类继承的PersistService 类中,也用spring注入了一个对数据库的通用的dao操作类(JpaPersistence jpaPersistence)
这样就可以在不同的service类中使用相同的dao操作类,这个通用的dao操作类是由spring的配置文件实例化的,配置如下:
那这个通用的dao操作类(JpaPersistence jpaPersistence)也就是singleton的,那这个通用的dao操作类在不同的service类中使用,会不会也像在STRUTS2的action中使用service类一样会导致数据混乱呢???