@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
//...
}
- @Configuration : 설정정보
- @Bean : 스프링 컨테이너에 등록
public class MemberApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
//(name(메서드 이름), 타입)
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
//...
}
- ApplicationContext : 스프링 컨테이너
- ApplicationContext는 인터페이스
- new AnnotationConfigApplicationContext(AppConfig.class);는 ApplicationContext 인터페이스의 구현체
@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
//iter + tab
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + "object = " + bean);
}
}
}
- getBeanDefinitionNames(); : 스프링에 등록된 모든 빈 이름을 조회
- getBean(); : 빈 이름으로 빈 객체를 조회
- getBean(빈 이름, 타입), getBean(타입)
- getBeanDefinition : 빈 하나하나에 대한 메타데이터 정보
- getRole() -> ROLE_APPLICATION : 사용자가 정의한 빈
- getRole() -> ROLE_INFRASTRUCTURE : 스프링 내부에서 사용하는 빈
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈 관리, 조회
- getBean() 제공
ApplicationContext
- BeanFactory기능 모두 상속받아 제공
- 빈 관리기능 + 부가 기능
거의 ApplicationContext를 사용
BeanFactory, ApplicationContext를 스프링 컨테이너라 한다.