한울이

[SPRING] @Value annotation 본문

PROGRAMMING

[SPRING] @Value annotation

gksdnf050 2022. 8. 20. 16:06

static 변수에는 @Value annotaion을 사용할 수 없음 (사용하려면 setter를 통해 사용)

이유: static은 ApplicationContext 초기화 이전에 메모리에 올라가기 때문에 ApplicationContext에 의존적인 값은 사용할 수 없고  스프링의 관리 대상이 아님




### 참고 

초기화 순서

클래스 변수
클래스 메서드
인스턴스 변수
인스턴스 메서드
로컬 변수
로컬 메서드

클래스변수(static)가 클래스초기화 되면서 제일 먼저 초기화가 실행

하지만 static변수가 인스턴스변수나 인스턴스 메서드를 참조하고 싶어도 아직 다른 객체들은 생성되기 전 시점

따라서 클래스 멤버에서 인스턴스 전용 키워드인 this를 사용하면 컴파일 에러가 발생

객체가 생성되지도 않았는데 객체를 참조하려 할때 발생할 수밖에 없는 런타임 null 객체 에러를 컴파일 타임에 미리 봉쇄
반대로 인스턴스 멤버를 초기화하는 시점에서는 이미 클래스 멤버들은 초기화가 끝나있는 상태이므로 인스턴스 멤버들은 얼마든지 클래스 멤버들을 참조 가능

물론 이때도 클래스 멤버는 인스턴스 멤버를 참조할 수 없음 (this 사용불가)

'PROGRAMMING' 카테고리의 다른 글

[OTP] One Time Password  (0) 2022.08.20
[DOCKER] cache gradle dependencies  (0) 2022.08.20
[JAVA] Generics  (0) 2022.08.20
[JAVA] Call-by-value VS Call-by-reference  (0) 2022.08.20
[JAVA] 변성  (0) 2022.06.10
Comments