https://velog.io/@helenason/SW-dependency
위 글에서 의존성과 의존성 주입에 대해 작성해보았다. 해당 개념을 스프링에서는 어떻게 적용할 수 있을까.
의존성을 주입하기 위해 스프링에서는 보통 두 가지 방식을 사용한다.
@Component
라는 애노테이션이 존재하면 스프링 빈으로 자동 등록된다. @Controller
, @Service
, @Repository
는 모두 @Component
를 포함하기 때문에 해당 애노테이션을 달아주면 스프링 빈으로 등록할 수 있다.
각각에 맞는 애노테이션을 달아준 후 @Autowired
애노테이션을 생성자에 붙여줌으로써 객체가 생성될 때 스프링이 스프링 컨테이너에서 스프링 빈을 찾아 넣어줄 수 있도록 한다. 이러한 방식으로 스프링에서 의존성을 주입할 수 있다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Service
public class memberService {}
위 두 코드를 통해 아래 그림의 하이라이트 부분의 의존관계가 완성된다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
위와 같이 별도 클래스에서 직접 코드를 작성하여 의존관계를 주입해줄 수도 있다.