为什么我们不能在spring自动assembly静态字段?

为什么不能在Spring bean中自动装入静态实例variables。 我知道还有其他办法可以做到这一点,但只是想知道为什么我们不能在下面的方式做到这一点。

例如

@Autowired public static Test test; 

因为使用静态字段鼓励使用静态方法。 而静态方法是邪恶的。 dependency injection的主要目的是让容器为你创build对象并连线。 它也使testing更容易。

一旦你开始使用静态方法,你不再需要创build一个对象的实例,testing是困难的。 你也不能创build给定类的几个实例,每个实例都被注入了不同的依赖(因为这个字段被隐式地共享并创build了全局状态 – 也是邪恶的)。

因为当类加载器加载静态值时,Spring上下文还没有被加载。 所以类加载器将不会正确地将静态类注入到bean中,并会失败。

根据OOP的概念,如果静态variables是自动assembly的,这将是不好的devise。

静态variables不是Object的一个属性,但它是一个Class的属性。 spring的自动布线是在对象上完成的,这使我的devise变得清晰。 您可以将auto wired bean对象部署为单例,并将其定义为static。

通过这个解决scheme,你可以在spring自动编写静态字段。

 @Component public class TestClass { private static Test test; @Autowired public void setTest(Test test) { TestClass.test = test; } }