为什么我们不能在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; } }