IoC(Inversion of Control)
- 의존 관계 주입(Dependency Injection)이라고도 한다.
- 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말함.
스프링 IoC 컨테이너는 빈 설정 파일이 있어야 한다.
ClassPathXmlApplicationContext (XML)
new ClassPathXmlApplicationContext(ApplicationConfig.class);
xml 파일에 bean 으로 등록하거나 component-scan을 사용
<?xml version=”1.0” encoding=”UTF-8”?>
<beans xmlns=”...” …>
<bean id=”bookService” class=”me.whiteship.springapplicationcontext.BookService”>
<property name=”bookRepository” ref=”bookRepository />
</bean>
<bean id=”bookRepository” class=”me.whiteship.springapplicationcontext.BookRepository”>
<beans>
<?xml version=”1.0” encoding=”UTF-8”?>
<beans xmlns=”...” …>
<context:component-scan base-package=”me.whiteship.springapplicationcontext”/>
<beans>
AnnotationConfigApplicationContext (Java)
필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입한다.
BeanPostProcessor
AutowiredAnnotationBeanPostProcessor extends BeanPostProcessor
동작 순서
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Configuration
@ComponentScan
public class AutoAppConfig {
}
@Component
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}