Warum können wir die statische Instanzvariable in der Spring Bean nicht automatisch verdrahten? Ich weiß, dass es einen anderen Weg gibt, dies zu erreichen, aber ich möchte nur wissen, warum wir es nicht so machen können.
z.B
@Autowired
public static Test test;
Antworten:
Weil die Verwendung statischer Felder die Verwendung statischer Methoden fördert. Und statische Methoden sind böse. Der Hauptzweck der Abhängigkeitsinjektion besteht darin, dass der Container Objekte für Sie erstellt und diese verkabelt. Außerdem erleichtert es das Testen.
Sobald Sie anfangen, statische Methoden zu verwenden, müssen Sie keine Objektinstanz mehr erstellen, und das Testen ist viel schwieriger. Sie können auch nicht mehrere Instanzen einer bestimmten Klasse erstellen, von denen jede eine andere Abhängigkeit aufweist (da das Feld implizit gemeinsam genutzt wird und einen globalen Status erzeugt - auch böse).
quelle
@BeforeClass
in einem SpringJUnit4ClassRunner verwenden möchten und diese Methode@Autowired
im Test auf Beans zugreifen möchten, können Sie dies im Grunde nicht. Welches ist ärgerlich.Denn wenn der Klassenlader die statischen Werte lädt, ist der Spring-Kontext noch nicht unbedingt geladen. Der Klassenlader fügt die statischen Felder in der Bean daher nicht ordnungsgemäß ein und schlägt fehl.
quelle
Nach dem OOP-Konzept ist es ein schlechtes Design, wenn statische Variablen automatisch verdrahtet werden.
Statische Variable ist keine Eigenschaft von Object, aber eine Eigenschaft einer Klasse. Die automatische Federverdrahtung erfolgt an Objekten, und das macht das Design meiner Meinung nach sauber. Sie können das automatisch verdrahtete Bean-Objekt als Singleton bereitstellen und das Gleiche wie statisch definieren.
quelle
Mit dieser Lösung können Sie statische Felder im Frühjahr automatisch verdrahten.
quelle