아래는 Test클래스의다.
보통 Autowired를 사용할 때는 final 을 사용했다. final을 사용하면 빨간줄 뜬다.
static을 빼고 final만 사용하면 빨간줄 안뜬다.
-> 객체의 생성시점이 달라서 그렇다. static은 스프링 빈이 로딩되기 전에 초기화 된다. static final은 static변수가 생성되면서 바로 초기화되어야 하는데 이 시점에는 아직 빈이 없기 때문에 값을 넣을 수가 없는 것.
static final에 빈을 넣을 수는 없다. (final은 생성과 동시에 초기화 해야함.)
static이 있으면 static을 담고 있는 객체가 생성되기 전에 바로 객체가 생성되기 때문에 final을 붙이면 에러뜨는 것.(context가 로드되지 않은 시점에서 초기화 되기 때문에 null인 상태가 된다.)
public static final StoreRepository storeRepository = new ~ 이렇게 작성하면 빨간줄 안생긴다.. 이 방법은 빈에서 받는게 아니라 단순 객체 생성임. 빈에서 받을 수 없는 것임.
결론적으로 static final에는 DI를 할 수 없다. static에는 어떻게 할 수는 있지만 피하는게 좋다.
정리 : static에는 스프링 빈을 사용하지 말자
@
static 필드에 DI하는 법. static에는 DI하지 않는 것이 좋다. 그냥 하지마라.
https://mebadong.tistory.com/89
'코딩 > Java, SpringBoot' 카테고리의 다른 글
형식을 알지 못하는 JSON을 클래스로 만들 수 있을까? (0) | 2022.08.05 |
---|---|
[SpringBoot] 엔티티에는 setter를 두지 않는다. 확장성 있는 함수구성 (0) | 2022.08.05 |
[JAVA]예외는 언제 사용해야할까? (0) | 2022.07.28 |
DTO <->Entity 변환. converter? vs toEntity(), toDTO()? (0) | 2022.07.22 |
stack trace읽는 법. 너무 좋은 글이라 저장! (0) | 2022.07.20 |