봄에는 왜 정전기장을 자동 배선할 수 없는 거죠?
Spring bean에서는 스태틱인스턴스 변수를 자동 배선할 수 없습니다.다른 방법이 있다는 것을 알지만 왜 우리가 아래 방법으로 할 수 없는지 알고 싶습니다.
예.
@Autowired
public static Test test;
Java 클래스 로더가 정적 값을 로드할 때 Spring 컨텍스트가 로드되지 않을 수 있으므로 스프링에는 정적 필드를 자동 연결할 수 없습니다.이 경우 클래스 로더는 콩에 정적 필드를 올바르게 삽입하지 못하고 실패합니다.
static 필드를 사용하면 static 메서드의 사용을 권장되기 때문입니다.그리고 정적인 방법은 사악하다.종속성 주입의 주요 목적은 컨테이너가 사용자를 위해 개체를 생성하고 배선하도록 하는 것입니다.또한 테스트를 더 쉽게 할 수 있습니다.
정적 메서드를 사용하기 시작하면 오브젝트의 인스턴스를 생성할 필요가 없어지고 테스트가 훨씬 어려워집니다.또한 각 클래스에서 서로 다른 종속성을 가진 여러 인스턴스를 만들 수 없습니다(필드가 암묵적으로 공유되어 글로벌 상태를 생성하기 때문에).
OOP 개념에 따르면 정적 변수가 자동배선되면 설계가 나빠집니다.
정적 변수는 개체의 속성은 아니지만 클래스의 속성입니다.스프링 자동차 배선은 물체에 하기 때문에 디자인이 깔끔하다고 생각합니다.auto wired bean 객체를 싱글톤으로 전개하여 스태틱하게 정의할 수 있습니다.
이 솔루션을 사용하면 봄에 정적 필드에 자동 전력을 공급할 수 있습니다.
@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
'programing' 카테고리의 다른 글
| Ajax(fetch, XHR 등) 요청에 대한 응답으로 리다이렉트 반환 (0) | 2023.02.21 |
|---|---|
| WooCommerce - Ajax 장바구니에 추가 및 업데이트 합계 (0) | 2023.02.21 |
| 레디스를 사용한 MongoDB (0) | 2023.02.21 |
| 네이티브 변경 리스닝 포트 대응 (0) | 2023.02.21 |
| JavaScript가 AJAX 이벤트를 검출하다 (0) | 2023.02.21 |