@Autowired는 의존성 주입을 할 때 사용하는 Annotation으로 의존 객체의 타입에 해당하는 bean을 찾아 주입하는 역할을 한다.
@Autowired는 기본적으로 아래의 위치에서 사용할 수 있다.
@Service public class TestService { TestRepository testRepository; @Autowired public TestService(TestRepository testRepository) { this.testRepository = testRepository; } }
위의 코드에서 TestRepository의 의존성 주입이 작동할까?
당연히 작동하지 않는다. @Autowired는 의존 객체의 타입에 해당하는 bean을 찾아 주입하기 때문이다. 즉, TestRepository는 bean으로 등록되어있지 않기 때문에 스프링이 bean을 찾지 못해 의존성을 주입할 수 없다.
이를 작동하게 하기 위해서는 @Repository 혹은 @Component Annotation을 이용해
TestRepository를 bean으로 등록해주면 된다.
@Repository public class TestRepository { .... }
Lombok을 사용하면 생성자도 자동으로 생성할 수 있습니다. @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해주고, @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다. 마지막으로 @RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줍니다.