> Java > java지도 시간 > Spring에서 필드 주입보다 생성자 또는 Setter 주입이 선호되는 이유는 무엇입니까?

Spring에서 필드 주입보다 생성자 또는 Setter 주입이 선호되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-08 01:54:12
원래의
332명이 탐색했습니다.

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

필드 주입이란 무엇이며 일반적으로 선호되지 않는 이유

Spring MVC 및 포틀릿 애플리케이션에서 필드 주입은 주석이 달린 필드에 종속성을 직접 주입하는 방식을 의미합니다. 다음 예에서 볼 수 있듯이 @Autowired를 사용합니다.

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
로그인 후 복사

대안으로 생성자 주입에는 전달이 포함됩니다. 생성자에서 매개변수로서의 종속성:

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart) {
        this.cart = cart;
    }
}
로그인 후 복사

장점과 단점:

생성자 주입은 여러 가지 장점을 제공합니다.

  • 불변성: 종속성이 있으므로 불변 객체를 생성할 수 있습니다. 인스턴스화 시 할당됩니다.
  • 느슨한 결합: 클래스는 DI 컨테이너에 대한 종속성이 더 느슨하며 DI 컨테이너 외부에서 사용할 수 있습니다.
  • 테스트 가능성: 리플렉션 없이 단위 테스트를 위해 객체를 인스턴스화할 수 있습니다.

Setter 주입도 가능합니다. 선택 사항이거나 시간이 지남에 따라 변경될 수 있는 종속성을 주입하기 위한 메커니즘을 제공하는 옵션입니다.

반대로 필드 주입에는 몇 가지 단점이 있습니다.

  • 밀접한 결합: DI 컨테이너와 긴밀한 결합을 만듭니다.
  • 불변성: 불변 객체 생성을 방해합니다.
  • 반사 요구 사항: DI 컨테이너 외부의 인스턴스화를 위해 반사가 필요합니다.
  • 숨겨진 종속성: 실제 종속성 인터페이스에서 가려져 있습니다.
  • 너무 많습니다. 종속성: 단일 책임 원칙을 위반하여 과도한 종속성을 추가하도록 조장합니다.

삽입 지침:

Spring에서는 다음 지침을 권장합니다.

  • 필수 종속성 또는 달성을 위해 생성자 주입을 사용합니다. 불변성.
  • 선택적이거나 변경 가능한 종속성에 대해 setter 주입을 사용하십시오.
  • 대부분의 경우 필드 주입을 피하십시오.

결론:

필드 주입의 단점을 고려하면 일반적으로 생성자 또는 설정자 주입을 선호하는 것이 좋습니다. 현장 주입의 편리함은 잠재적인 단점과 한계로 인해 더욱 중요해졌습니다.

위 내용은 Spring에서 필드 주입보다 생성자 또는 Setter 주입이 선호되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿