728x90

Controller 와 Service 에서 Autowired 가 없는이유

@RequiredArgsConstructor
@Service
public class PostsService {
    private final PostsRepository postsRepository;

    @Transactional
    public Long save(PostsSaveRequestDto requestDto) {
        return postsRepository.save(requestDto.toEntitiy()).getId();
    }
}

 

Bean 을 주입받는 방식들이 다음과 같습니다.

 

  • @Autowired
  • setter
  • constructor

이 중 가장 권장되는 방식이 생성자(constructor) 로 주입받는 방식입니다. (@Autowired 는 지양하는 방식입니다.)

 

즉 생성자로 Bean 객체를 받도록 하면 @Autowired 와 동일한 효과를 볼 수 있다는 것입니다.

그러면 코드에서 생성자는 어디 있을까요?

 

@RequiredArgsConstructor

 

어노테이션이 해결 해줍니다.

final 이 선언된 필드를 인자값으로 하는 생성자를 롬복의 @RequiredArgsConstructor 가 대신 생성해 준 것입니다.

 

생성자를 직접 쓰지 않고 롬복 어노테이션을 사용한 이유는 해당 클래스의 의존성 관계가 변경될 때마다 생성자 코드를 계속해서

수정해야하는 번거로움을 해결하기 위함입니다.

 

 

728x90