Dlaczego nie możemy automatycznie podłączyć statycznej zmiennej instancji w komponencie bean Spring. Wiem, że jest inny sposób, aby to osiągnąć, ale chcę tylko wiedzieć, dlaczego nie możemy tego zrobić w poniższy sposób.
na przykład
@Autowired
public static Test test;
Odpowiedzi:
Ponieważ używanie pól statycznych zachęca do korzystania z metod statycznych. A metody statyczne są złe. Głównym celem wstrzykiwania zależności jest umożliwienie kontenerowi tworzenia obiektów i łączenia ich. Ułatwia również testowanie.
Gdy zaczniesz używać metod statycznych, nie musisz już tworzyć instancji obiektu, a testowanie jest znacznie trudniejsze. Nie możesz także stworzyć kilku instancji danej klasy, z których każda będzie miała inną zależność (ponieważ pole jest niejawnie współdzielone i tworzy stan globalny - także zły).
źródło
@BeforeClass
w SpringJUnit4ClassRunner i mieć tę metodę dostępu do komponentów bean@Autowired
w teście, w zasadzie nie możesz. Co jest denerwujące.Ponieważ program ładujący klasy ładuje wartości statyczne, kontekst Spring niekoniecznie jest jeszcze ładowany. Więc moduł ładujący klasy nie wprowadzi prawidłowo pól statycznych do fasoli i zawiedzie.
źródło
Zgodnie z koncepcją OOP projekt będzie złym rozwiązaniem, jeśli zmienne statyczne będą automatycznie dołączane.
Zmienna statyczna nie jest własnością Object, ale jest właściwością klasy. Automatyczne okablowanie sprężynowe odbywa się na obiektach, co moim zdaniem sprawia, że projekt jest czysty. Możesz wdrożyć obiekt automatu bean jako singleton i osiągnąć to samo, co zdefiniowanie go jako statycznego.
źródło
Dzięki temu rozwiązaniu wiosną można automatycznie łączyć pola statyczne.
@Component public class TestClass { private static Test test; @Autowired public void setTest(Test test) { TestClass.test = test; } }
źródło