Programing

스프링에 정적 필드를 자동으로 연결할 수없는 이유

lottogame 2020. 9. 4. 08:03
반응형

스프링에 정적 필드를 자동으로 연결할 수없는 이유


Spring 빈에서 정적 인스턴스 변수를 자동으로 연결할 수없는 이유는 무엇입니까? 나는 이것을 달성하는 다른 방법이 있다는 것을 알고 있지만 왜 우리가 아래 방식으로 할 수 없는지 알고 싶습니다.

예 :

@Autowired
public static Test test;

정적 필드를 사용하면 정적 메서드 사용이 권장되기 때문입니다. 그리고 정적 방법은 악합니다. 의존성 주입의 주요 목적은 컨테이너가 사용자를 위해 객체를 생성하고 연결하도록하는 것입니다. 또한 테스트를 더 쉽게 만듭니다.

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


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


OOP 개념에 따르면 정적 변수가 자동으로 연결되면 잘못된 설계가됩니다.

정적 변수는 Object의 속성이 아니라 Class의 속성입니다. 스프링 자동 배선은 객체에서 이루어지며 제 생각에는 디자인이 깨끗합니다. 자동 와이어드 빈 객체를 싱글 톤으로 배포 할 수 있으며이를 정적으로 정의하는 것과 동일하게 달성 할 수 있습니다.


이 솔루션으로 스프링에 정적 필드를 자동으로 연결할 수 있습니다.

@Component
public class TestClass {

    private static Test test;

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

참고 URL : https://stackoverflow.com/questions/10938529/why-cant-we-autowire-static-fields-in-spring

반응형