@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";