Spring -- 单例Bean是线程安全的吗?

Spring默认情况下就是单例的

但是可以设置 @Scope 的值为 prototype 将Bean设置为多例的,如下

@Service
@Scope("prototype")
public class UserServiceImpl implements UserService {
    
}

那么单例Bean是线程安全的吗?

不是

但是

看以下代码

有个成员变量 count ,成员变量是 需要考虑线程安全问题的

userService 是无状态的, 因此无需考虑线程安全问题

getById中的参数id是形参,形参是不需要考虑线程安全的

@Controller
@RequestMapping("/user")
public class UserController {

    private int count;
    
    @Autowired
    private UserService userService;

    @GetMapping("/getById/{id}")
    public User getById(@PathVariable("id") Integer id){
        count++;
        System.out.println(count);
        return userService.getById(id);
    }
}

因此实际上,单例Bean在某种程度上又是线程安全的

因此在开发过程中尽量不要定义可修改的成员变量

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