We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext 를 스프링 컨테이너라 한다
ApplicationContext
ApplicationContext는 인터페이스이다.
스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스를 만들 수 있다.
정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분해서 이야기한다.
BeanFactory
빈 이름은 항상 다른 이름을 부여해야한다. 같은 이름을 부여하면, 다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
스프링 컨테이너는 설정 정보를 참고해서 **의존관계를 주입(DI)**한다.
스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다.
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 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); } }
ac.getBeanDefinition()
ac.getBean()
getRole()
Role.ROLE_APPLICATION
Role.ROLE_INFRASTRUCTURE
ac.getBean(**빈이름, 타입**)
ac.getBean(**타입**)
NoSuchBeanDefinitionException
NoUniqueBeanDefinitionException
ac.getBeansOfType()
Object
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class); for (String key : beansOfType.keySet()) { System.out.println("key = " + key + " value = " + beansOfType.get(key)); }
getBean()
스프링은 BeanDefinition 이라는 추상화 정보를 통해 다양한 설정 형식을 지원한다.
BeanDefinition
역할과 구현을 개념적으로 나눈 것이다.
XML
BeanDefinition을 빈 설정 메타정보라 한다.
@Bean, <bean> 당 각각 하나씩 메타 정보가 생성된다.
@Bean
<bean>
스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.
AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다.
AnnotationConfigApplicationContext
AnnotatedBeanDefinitionReader
AppConfig.class
GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.
GenericXmlApplicationContext
XmlBeanDefinitionReader
appConfig.xml
BeanDefinition 정보
The text was updated successfully, but these errors were encountered:
No branches or pull requests
스프링 컨테이너와 스프링 빈
스프링 컨테이너 생성
ApplicationContext
를 스프링 컨테이너라 한다ApplicationContext
는 인터페이스이다.스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스를 만들 수 있다.
정확히는 스프링 컨테이너를 부를 때
BeanFactory
,ApplicationContext
로 구분해서 이야기한다.빈 이름은 항상 다른 이름을 부여해야한다. 같은 이름을 부여하면, 다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
스프링 컨테이너는 설정 정보를 참고해서 **의존관계를 주입(DI)**한다.
스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링
빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다.
스프링 빈 출력하기
ac.getBeanDefinition()
: 스프링에 등록된 모든 빈의 이름을 조회한다.ac.getBean()
: 빈 이름으로 빈 객체를 조회한다.getRole()
로 구분한다Role.ROLE_APPLICATION
: 직접 등록한 애플리케이션 빈Role.ROLE_INFRASTRUCTURE
: 스프링 내부에서 사용하는 빈스프링 빈 조회하기
ac.getBean(**빈이름, 타입**)
,ac.getBean(**타입**)
NoSuchBeanDefinitionException
NoUniqueBeanDefinitionException
ac.getBeansOfType()
을 사용하면 해당 타입의 모든 빈을 조회할 수 있다스프링 빈 조회 - 상속관계
NoUniqueBeanDefinitionException
Object
타입으로 조회하면, 모든 스프링 빈을 조회한다.BeanFactory와 ApplicationContext
getBean()
을 제공한다.BeanFactory
가 제공하는 기능이다.BeanFactory
기능을 모두 상속받아서 제공한다.스프링 빈 설정 메타 정보 - BeanDefinition
스프링은
BeanDefinition
이라는 추상화 정보를 통해 다양한 설정 형식을 지원한다.역할과 구현을 개념적으로 나눈 것이다.
XML
을 읽어서BeanDefinition
을 만들면 된다.BeanDefinition
을 만들면 된다.BeanDefinition
을 빈 설정 메타정보라 한다.@Bean
,<bean>
당 각각 하나씩 메타 정보가 생성된다.스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.
AnnotationConfigApplicationContext
는AnnotatedBeanDefinitionReader
를 사용해서AppConfig.class
를 읽고BeanDefinition
을 생성한다.GenericXmlApplicationContext
는XmlBeanDefinitionReader
를 사용해서appConfig.xml
설정 정보를 읽고BeanDefinition
을 생성한다.BeanDefinition 정보
생성을 지연처리 하는지 여부
빈을 사용하면 없음)
The text was updated successfully, but these errors were encountered: