문제상황

서비스에 멤버필드를 넣었고 해당 필드를 immutable 하게 만들기위해 final로 선언했고, @value로 값을 주입했다.

아래 그림처럼->

아래그림처럼 바로 "String이라는 빈이 없는데?" 라며 에러가 터져버린다.

음... @RequiredArgsConstructor를 통해서 생성자를 만들때 final이 잘 초기화 될거라 생각했는데.. 갑자기 String을 빈으로 인식해버리네..?

 

그럼 직접 생성자를 만들어서, 초기화를 시켜주는 방법을 고안해보았다. 먼저 아래그림처럼 생성자를 만들었다. 

생성자만 만들면 @RequiredArgsConstructor 때와 동일하게 String을 빈으로 인식해서 빈객체로 만들려한다.

 

그럼 결론적으로 빈이 아닌 멤버필드를 @value를 사용해서 immutable 하게  어떻게 쓸수있을까!?

아래그림처럼 선언하면 가능해진다.

정리

1. @RequiredArgsConstructor 는 생성자 파라미터가 무조건 빈이라고 보기때문에 생성자를 통해 객체를 만들때 에러가 나는거라 유추된다.

2. 직접 생성자를 만들어서 생성자를 통해 객체를 만들때 @Value를 통하여 이 파라미터가 빈이 아니라는걸 명시 가능!

+ Recent posts