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>
스프링 빈과 비교
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
public class BeanDefinitionTest { // BeanDefinitionTest 클래스 정의
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); // Spring의 Annotation 기반 설정을 사용하는 ApplicationContext 생성
// GenericXmlApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml"); // XML 파일을 사용한 Spring 설정의 주석 처리된 대안 예시
@Test // JUnit의 테스트 메소드임을 나타내는 어노테이션
@DisplayName("빈 설정 메타정보 확인") // 테스트 메소드의 이름을 지정하는 어노테이션
void findApplicationBean() { // 테스트 메소드 정의
String[] beanDefinitionNames = ac.getBeanDefinitionNames(); // ApplicationContext에서 관리하는 모든 빈의 이름을 가져옴
for (String beanDefinitionName : beanDefinitionNames) { // 빈 이름 배열을 반복하며 각 빈 이름에 대하여
BeanDefinition beanDefinition =
ac.getBeanDefinition(beanDefinitionName); // 현재 빈 이름에 해당하는 BeanDefinition을 가져옴
if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) { // BeanDefinition의 역할이 ROLE_APPLICATION(사용자 정의 빈)인 경우
System.out.println("beanDefinitionName" + beanDefinitionName +" beanDefinition = " + beanDefinition); // 빈 이름과 빈 정의 정보를 출력
}
}
}
}
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 핵심 원리 | 기본편 | 싱글톤 컨테이너] 싱글톤 컨테이너, 싱글톤 방식의 주의점 (0) | 2024.05.09 |
---|---|
[스프링| 스프링 핵심 원리 | 기본편 | 싱글톤 컨테이너] 웹 애플리케이션과 싱글톤 (0) | 2024.05.09 |
[스프링| 스프링 핵심 원리 | 기본편 | 스프링 컨테이너와 스프링 빈]BeanFactory와 ApplicationContext (0) | 2024.05.08 |
[스프링| 스프링 핵심 원리 | 기본편 | 스프링 컨테이너와 스프링 빈]스프링 컨테이너에 등록된 빈 조회 (0) | 2024.05.08 |
[스프링| 스프링 핵심 원리 | 기본편 | 스프링 컨테이너와 스프링 빈]스프링 컨테이너 생성 (0) | 2024.05.07 |