[java] 정적 필드와 함께 @Autowired를 사용할 수 있습니까?

@Autowired정적 필드와 함께 사용 하는 방법이 있습니까? 그렇지 않은 경우 다른 방법이 있습니까?



답변

요컨대 스프링에서는 정적 필드를 자동 와이어 링하거나 수동으로 와이어 링 할 수 없습니다. 이를 위해서는 자신 만의 논리를 작성해야합니다.


답변

@Component("NewClass")
public class NewClass{
    private static SomeThing someThing;

    @Autowired
    public void setSomeThing(SomeThing someThing){
        NewClass.someThing = someThing;
    }
}


답변

@Autowired setter와 함께 사용하면 정적 필드를 수정하는 setter를 가질 수 있습니다.

그냥 하나 개의 최종 제안 … NOT DO


답변

@PostConstruct 메소드에서 자동 유선 구성 요소 초기화

@Component
public class TestClass {
   private static AutowiredTypeComponent component;

   @Autowired
   private AutowiredTypeComponent autowiredComponent;

   @PostConstruct
   private void init() {
      component = this.autowiredComponent;
   }

   public static void testMethod() {
      component.callTestMethod();
   }
}


답변

정적 변수를 부작용으로 초기화하는 autowire가 가능한 bean을 작성하십시오.


답변

XML 표기법 및을 사용하여이 작업을 수행 할 수 있습니다 MethodInvokingFactoryBean. 예를 들어 여기 를보십시오 .

private static StaticBean staticBean;

public void setStaticBean(StaticBean staticBean) {
   StaticBean.staticBean = staticBean;
}

이것이 권장되는 접근 방식이므로 가능한 한 스프링 주입 을 사용하는 것을 목표로해야 하지만 스프링 컨테이너에서 모든 것을 가져올 수 없거나 레거시 시스템을 다룰 수는 없다고 생각할 수 있으므로 항상 가능하지는 않습니다.

이 방법으로는 노트 테스트가 더 어려울 수 있습니다.


답변

자동 배선 정적 필드 (또는 상수)는 무시되지만 오류가 발생하지 않는다는 답변에 추가하고 싶었습니다.

@Autowired
private static String staticField = "staticValue";