[SPRING] 빈의 스프링 정적 초기화
SPRING빈의 스프링 정적 초기화
이봐 요, Spring에서 정적 초기화를 처리하는 방법은 무엇입니까? 내 bean은 정적 초기화를 가지고있다.
private static final Map<String, String> exceptionMapping = ErrorExceptionMapping.getExceptionMapping();
그리고 전에 ErrorExceptionMapping이로드되었는지주의해야합니다. 나는 이것을 시도 :
<bean id="errorExceptionMapping" class="cz.instance.transl.util.ErrorExceptionMapping" />
<bean id="validateService" class="cz.instance.transl.services.ValidateService" depends-on="errorExceptionMapping" >
하지만
java.lang.NoClassDefFoundError: Could not initialize class cz.instance.transl.util.ErrorExceptionMapping
정적 초기화를 생략하거나 bean 메소드 내에서 메소드를 호출하면 물론 괜찮습니다. 초기화 콜백 (affterPropertiesSet ())이 도움이되지 않는다고 생각합니다.
해결법
-
==============================
1.다른 bean에 정적 의존성을 갖는 것은 스프링 방식이 아닙니다.
다른 bean에 정적 의존성을 갖는 것은 스프링 방식이 아닙니다.
그러나 정적으로 유지하려는 경우 지연 시간을 초기화 할 수 있습니다.이 경우 depends-on은 적절한 초기화 순서를 적용 할 수 있습니다.
편집 : 게으른 로딩에 의해 나는 (여기에 홀더 클래스 관용구로 게으른 초기화를 사용하고, 다른 게으른 초기화 관용구를 대신 사용할 수있다.) 이와 같은 것을 의미한다.
private static class ExceptionMappingHolder { private static final Map<String, String> exceptionMapping = ErrorExceptionMapping.getExceptionMapping(); }
예외 맵핑 대신 ExceptionMappingHolder.exceptionMapping을 사용하십시오.
-
==============================
2.@Component 주석으로 클래스를 표시 한 다음 정적 변수를 설정하기 위해 @Autowired (required = true) 주석이없는 정적 세트 작성기를 추가 할 수 있어야합니다.
@Component 주석으로 클래스를 표시 한 다음 정적 변수를 설정하기 위해 @Autowired (required = true) 주석이없는 정적 세트 작성기를 추가 할 수 있어야합니다.
더 많은 정보를 얻을 수있는 링크가 있습니다.
from https://stackoverflow.com/questions/4247705/spring-static-initialization-of-a-bean by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Log4j2가 Spring 부트 로깅 구현을 찾을 수 없음 (0) | 2019.05.31 |
---|---|
[SPRING] 봄 부팅 - JS를 웹 페이지에 추가 할 수 없음 (0) | 2019.05.31 |
[SPRING] AJAX 요청에 대한 응답으로 Spring MVC 컨트롤러에서 객체를 반환하는 방법은 무엇입니까? (0) | 2019.05.31 |
[SPRING] @Primary의 Spring XML과 동일합니다. (0) | 2019.05.30 |
[SPRING] Spring CaffeineCacheManager에 여러 개의 카페인로드 캐시가 추가되었습니다. (0) | 2019.05.30 |