본문 바로가기
Spring

[Spring] BeanFactory와 ApplicationContext

by sozr 2025. 11. 17.

 

 

BeanFactory와 ApplicationContext

 

 

 

 

 

BeanFactory

- 스프링 컨테이너의 최상위 인터페이스이다.

- 스프링 빈을 관리하고 조회하는 역할을 담당한다.

- getBean()을 제공한다.

 

 

ApplicationContext

- BeanFactory 기능을 모두 상속받아서 제공한다.

- 부가기능: 메세지 소스를 활용한 국제화 기능, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회

 

 

 

다양한 설정 형식 지원 - 자바 코드, XML

 

스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다. 

 

- 애노테이션 기반 자바 코드 설정 사용
AnnotationConfigApplicationContext

 

- XML 설정 사용

GenericXmlApplicationContext

 

 

XmlAppConfig 사용 자바 코드

 

import hello.core.member.MemberService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import static org.assertj.core.api.Assertions.*;
 public class XmlAppContext {
    	
        @Test
 	void xmlAppContext() {
 		ApplicationContext ac = new 
		GenericXmlApplicationContext("appConfig.xml");
 		MemberService memberService = ac.getBean("memberService", MemberService.class);
 		assertThat(memberService).isInstanceOf(MemberService.class);
    }
}

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://
 www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="memberService" class="hello.core.member.MemberServiceImpl">
        <constructor-arg name="memberRepository" ref="memberRepository" />
    </bean>
    <bean id="memberRepository" 
class="hello.core.member.MemoryMemberRepository" />
    <bean id="orderService" class="hello.core.order.OrderServiceImpl">
        <constructor-arg name="memberRepository" ref="memberRepository" />
        <constructor-arg name="discountPolicy" ref="discountPolicy" />
    </bean>
    <bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy" />
 </beans>

 

 

 

스프링 빈 설정 메타 정보 - BeanDefinition

 

package hello.core.beandefinition;

import hello.core.AppConfig;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class BeanDefinitionTest {
	AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
    //    GenericXmlApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
    
    @Test
    @DisplayName("빈 설정 메타정보 확인")
    void findApplicationBean() {
    	String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
        	BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
            	System.out.println("beanDefinitionName" + beanDefinitionName + " beanDefinition = " + beanDefinition);
            }
        }
    }
}

 

 

 

 

 

'Spring' 카테고리의 다른 글

[Spring] 싱글톤 컨테이너  (0) 2025.11.24
[Spring] 싱글톤 패턴  (0) 2025.11.20
[Spring] 스프링 빈 조회  (0) 2025.11.12
[Spring] 스프링 컨테이너  (0) 2025.11.09
[Spring] IoC, DI, 컨테이너  (0) 2025.11.07