생성자 주입 & 필드 주입


1. 생성자 주입 (Constructor Injection) & 필드 주입 (Field Injection) 이란?

@Autowired  
private  UserService  userService;  
private JavaMailSender javaMailSender;  
private RedisTemplate<String, String> redisTemplate;   

@Autowired  
public EmailServiceImpl(JavaMailSender javaMailSender, RedisTemplate<String, String> redisTemplate){
    this.javaMailSender = javaMailSender;
    this.redisTemplate = redisTemplate;
}

2. 왜 Constructor Injection을 추천하는가?

의존성 주입할 때 생성자 주입을 추천한다.
깔끔한 코드는 필드 주입인 것 같은데 왜 생성자 주입을 추천할까?

참고 : https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/