不能直接使用@Autowired & @Service的场景

//@Service  不能托管给spring,一旦交给spring托管了那就只会生成一个实例,
//而setUserId这个方法同个实例如果被多个用户同时调用就会导致数据被覆盖的风险
public class UploadService  {

    public String userId = "system";

    public void setUserId(String userId) {
        this.userId = userId;
    }
    
    public void test(){
     //xxxxxxx 
    }
}

在Controller里面如果需要调用上面这个service必须得new一个对象,而不能直接使用如下方法:
@Autowired
private UploadService uploadService; 
//spring去管理这个对象时只会创建一个实例,也就是多用户只使用一个实例,而这个实例又有自己的变量,
//当多用户使用时会一直覆盖,这就是线程不安全
//而如果使用UploadService uploadService = new UploadService();
//那么就会给每个用户创建一个UploadService实例,这就是线程安全的意思

 

你可能感兴趣的:(springboot,java,spring注解)