【理解Spring】自动注入对 static 字段不支持的原因

举个例子: 有一个原型类 OrderService

@Component
@Scope("prototype")
public class OrderService {
}

和另一个原型类 UserServiceUserService 中有一个静态属性 OrderService orderService 并被 @Autowired 标注


@Component
@Scope("prototype")
public class UserService {
    @Autowired
    private static OrderService orderService;

    public void test() {
        System.out.println("test123");
    }
}

假设 Spring 支持 static 字段进行自动注入,如果调用两次

UserService userService1 = context.getBean("userService")
UserService userService2 = context.getBean("userService")

userService2 创建时,会将属性 orderService 重新赋值并覆盖,导致 userService1 中的值发生变化,和预期不符,容易产生 bug。