spring 다운로드 왜 우리는 봄에 정적 필드를 autowire 수없는거야?




spring 뜻 (4)

왜 우리는 스프링 빈에서 정적 인스 턴스 변수를 autowire하지 않을까? 나는 이것을 달성 할 수있는 다른 방법이 있다는 것을 알고 있지만 왜 우리가 아래의 방법으로 그렇게하지 못하는지를 알고 싶습니다.

@Autowired
public static Test test;

Answer #1

이 솔루션을 사용하면 봄에 자동으로 정적 필드를 생성 할 수 있습니다.

@Component
public class TestClass {

    private static Test test;

    @Autowired
    public void setTest(Test test) {
        TestClass.test = test;
    }
}

Answer #2

정적 필드를 사용하면 정적 메서드가 사용되기 쉽기 때문입니다. 정적 인 방법은 악합니다. 의존성 삽입의 주요 목적은 컨테이너가 당신을 위해 객체를 생성하고 와이어 링하도록 허용하는 것입니다. 또한 테스트가 더 쉬워집니다.

정적 메서드를 사용하기 시작하면 더 이상 개체의 인스턴스를 만들 필요가 없으며 테스트가 훨씬 더 어려워집니다. 또한 주어진 클래스의 인스턴스를 여러 개 만들 수 없습니다. 각 인스턴스는 서로 다른 종속성이 주입됩니다 (필드가 암시 적으로 공유되고 전역 상태 - 악의이기 때문에).


Answer #3

클래스 로더가 정적 값을로드 할 때 스프링 컨텍스트가 아직 반드시로드되지 않았기 때문입니다. 따라서 클래스 로더는 빈에 정적 클래스를 제대로 삽입하지 못하고 실패합니다.


Answer #4

OOP 개념에 따르면 정적 변수가 자동으로 실행되는 경우 잘못된 디자인이됩니다.

정적 변수는 Object의 속성이 아니지만 클래스의 속성입니다. 스프링 자동 배선은 물체에서 이루어지며, 이는 내 의견으로는 디자인을 깨끗하게합니다. 자동 유선 bean 객체를 싱글 톤으로 배치하고 정적으로 정의하는 것과 동일한 결과를 얻을 수 있습니다.





spring