Basic#3 Spring Bean

5819 단어 SpringSpring

3. Spring Bean

1. Spring Container

Spring container가 각 객체를 bean으로 등록하여 사용한다고 이전 section에 잠깐 확인했었다. 이를 위해서는 구성 정보가 필요하고 이를 AppConfig.class@Bean를 통해서 제공했다.

ApplicationContext가 Spring container라고 부를 수 있으며 이를 상속받아 annotation으로 bean 정보를 제공하는 AnnotationConfigApplicationContext로 사용한다. 이 container가 AppConfig의 annotation을 이용하여 Bean을 생성하고 DI를 실행한다.

BeanFactory

Spring의 최상위 인터페이스로, spring bean을 관리/조회하는 역할을 제공

ApplicationContext

BeanFactory외에 다른 인터페이스를 상속받는 spring container 인터페이스

  • 메세지 소스
  • 환경 변수
  • 애플리케이션 이벤트
  • 리소스 조회

지금까지 했던 방식은 annotation으로 bean 정보를 제공하는 방법을 이용했다. 하지만 spring container는 다양한 방식을 지원 가능 하다.(class, XML, ...) 중요한 건 얼마나 유연하게 컨테이너를 생성할 수 있는지를 아는 것

BeanDefinition

그럼 어떻게 다양한 설정 형식을 지원할까?
결국은 XML이든, java든 BeanDefinition을 만들고 spring container는 이를 참조하게끔 만들면 된다는 것. 이러한 BeanDefinitionMeta정보라고 부르며 spring container가 필요로 하는 궁극적인 데이터다.

2. Bean

구현체가 spring container에 의해 Bean으로 생성되고 관리되기 때문에 bean을 조회하거나 사용하려면 container를 이용한다.

Bean 가져오기

container의 BeanDefinition을 가져와서 bean을 확인할 수 있다.

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

String[] beanDefinitionNames = ac.getBeanDefinitionNames();	// 메타정보에 포함된 bean의 이름 정보

이때, 개발자가 추가한 bean 만을 확인하려면, BeanDefinition.ROLE_APPLICATION을 이용한다.

for(String beanDefinition : beanDefinitionNames) {
	BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
    if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
    	Object bean = ac.getBean(beanDefinitionName);
    }
}

ac.getBean()은 bean의 이름, 타입, 또는 둘 다를 사용하여 가져올 수 있다.

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

ac.getBean("name", type);

특정 타입의 bean을 모두 가져오려면 ac.getBeansOfType()을 이용한다. return값은 Map형식으로 반환된다.

Map<String, MemberService> beans = ac.getBeansOfType(MemberService.class);

Bean을 조회할 때, 그 bean뿐만 아니라 자식 bean도 가져오는 것을 기억해야한다. (Bean도 상속관계를 가진다.) 특정 자식 bean만을 조회할 때는 해당되는 하위 클래스로 조회하거나 이름을 지정하여 조회하여야 한다.


🛠 계속 업데이트 필요
2022.03.05 최초 작성

좋은 웹페이지 즐겨찾기