728x90
- 스프링 컨테이너와 스프링 빈
1. 스프링 컨테이너 생성
AppliationContext는 인터페이스이다.이걸 컨테이너라고 보통 부른다
AnnotationConfigApplicationContext는 AppliationContext의 구현체이다.
스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보(AppConfig)를 사용해서 스프링 빈을 등록한다.
new AnnotationConfigApplicationContext(AppConfig.class)
2. 스프링 빈 등록
스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 이용해 스프링 빈을 등록한다.
스프링 빈은 @Bean이 붙은 메소드의 명을 스프링 빈의 이름으로 사용한다.
빈 이름은 항상 다른 이름을 부여하자.
스프링 빈을 찾을땐 applicaitonContext.getBean()
3. 스프링 의존 관계 설정
4. 컨테이너에 등록된 모든 빈 조회
<단축키>
for 문을 자동으로 만들어줌 : iter + tab
변수 자동 추출 : ctrl+alt+v
모든 빈 출력하는 코드는 다음과 같다.
class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name=" + beanDefinitionName + " object=" +
bean);
}
}
}
모든 빈 중에 사용하는 빈만 출력하고 싶으면 다음과 같이 쓴다.
getBeanDefinitionNames를 추출한뒤 그 안에서 Role이 ROLE_APPLICATION인것을 추출하면 된다.
@Test
@DisplayName("사용하는 빈 출력하기")
void findApplictationBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
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);
}
}
728x90