🙂 김영한님의 스프링 핵심원리를 공부하고 복습할 겸 정리해본다.
✔️ 스프링 컨테이너를 만드는 다양한 설정 형식
스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계
1. 자바 설정 클래스로 만들기
ApplicationCotext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
2. XML 기반으로 만들기
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
<?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
앞서 스프링 컨테이너는 다양한 설정 정보를 받아들이게 유연하게 설계되어 있다고 했다.
이는 BeanDefinition이라는 추상화가 있어 가능
✔️ 스프링 컨테이너 생성
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
✔️ 스프링 빈의 조회
모든 스프링 빈 조회와 내가 등록한 스프링 빈 조회
스프링 빈에는 우리가 주입한 것들도 있지만 자동으로 등록된 스프링 빈들도 존재한다.
ApplicationContext.getBeanDefinitionNames()
등록된 빈의 이름을 문자열 배열로 받아오기
스프링 빈을 조회할 때 우리는
ac.getBean("빈이름",타입)
ac.getBean(타입)
으로 찾을 수 있다.
동일한 타입이 둘 이상할 때는 NoUniqueBeanDefinitionException이 발생
그러나 이름을 통해서 조회하거나
MemberRepository memberRepository = ac.getBean("memberRepository1",
MemberRepository.class);
getBeansOfType을 이용하여 Mapd으로 받으면 조회가 가능하다.
Map<String, MemberRepository> beansOfType =
ac.getBeansOfType(MemberRepository.class);
✔️ BeanFactory와 ApplicationContext