본문 바로가기

코딩/Java, SpringBoot

SpringBoot static final에 DI하기?

아래는 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

 

[Spring] static 필드에 @Autowired(의존성 주입) 사용하기

겉으로 보기에는 이상이 없는 코드였는데 (물론 이건 내가 실력이 없고 무지했기에 아무런 이상이 없는 코드처럼 보였던 것이다.) NullPointerException이 뜨며 에러가 뜨는 상황이 발생했다. 그래서

mebadong.tistory.com