복붙노트

[SPRING] 왜 우리는 봄에 정적 필드를 autowire 수없는거야?

SPRING

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

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

e.

@Autowired
public static Test test;

해결법

  1. ==============================

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

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

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

  2. ==============================

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

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

  3. ==============================

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

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

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

  4. ==============================

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

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

    @Component
    public class TestClass {
    
        private static Test test;
    
        @Autowired
        public void setTest(Test test) {
            TestClass.test = test;
        }
    }
    
  5. from https://stackoverflow.com/questions/10938529/why-cant-we-autowire-static-fields-in-spring by cc-by-sa and MIT license