자바 객체의 생명 주기를 관리하고, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 즉, 빈(=자바 객체)의 생성부터 소멸까지 개발자 대신 관리해주는 공간이다.
AppConfig
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Bean이 붙은 메소드의 명을 스프링 빈의 이름으로 사용하여 빈 등록을 한다.
스프링 컨테이너 안에 스프링 빈 저장소가 있고, 스프링 빈 저장소 안에 빈이 있다.
MemberController
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired //MemberService와 의존관계를 가진다.
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Autowired
가 정상적으로 동작하려면 두 인스턴스가 빈으로써 스프링 컨테이너에 등록되어 있어야 한다.ApplicationContext가 BeanFactory 자체를 상속받은 것은 아니지만 빈을 관리하는 기능을 물려받았고 추가적인 기능까지 제공한다.
그래서 특별한 이유가 없다면 ApplicationContext를 사용해야 한다고 공식문서에 나와있습니다.
@Component
Annotation을 통해 가능하다.@Controller
,Service
,@Repository
등의 어노테이션들은 인터페이스로 @Component
를 받기 때문에 컴포넌트 등록이 가능하다.@Configuration
과 @Bean
으로 가능하다.@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
스프링이 각 객체간 의존관계를 관리하도록 하는데에 목적이 있다. 객체가 의존관계를 등록할 때 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만든다.