티스토리 뷰
반응형
ApplicationContext는 자바의 환경설정파일을 만들 때 다양한 방식으로 정보를 만들 수 있도록 도와준다.
아래 그림을 확인해보면 Annotation을 이용할 수 있도록 도와주는 AnnotationConfigApplicationContext
XML파일로 환경설정 될 수 있도록 도와주는 GenericXmlApplicationContext 등이 있다.
우리는 보통 어노테이션을 활용한 AnnotationConfigApplicationContext를 사용한다.
(스프링부트를 많이 사용하면서 XML기반은 잘 사용하지 않는다)
그래도 간단하게 예제로 알아보며 비교해보자
1. 어노테이션 이용하여 Bean등록하기
어노테이션을 이용하려면 AnnotationConfigApplicationContext을 사용한다.
AppConfig.java를 하나씩 뜯어본다면,
스프링컨텍스트에 올려놓고자 하는 환경설정 파일에는 @Configurable을 상단에 작성한다
올려놓고자하는 Bean객체에 @Bean을 입력한다.
public 인터페이스명 빈객체명() {
return new 구현체();
}
또한, getMemberRepository는 공통으로 사용하여 중복을 제거해주었다.
아래 완성된 소스를 확인해보자
AppConfig.java
@Configurable
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(getMemberRepository());
}
@Bean
private MemberRepository getMemberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
}
@Bean
private DiscountPolicy getDiscountPolicy() {
return new RateDiscountPolicy();
}
}
그렇다면 위 환경설정파일이 잘 되었는지 확인해보자.
@Test
@DisplayName("Xml App Test")
void getXmlAppContext(){
ApplicationContext ac = new AnnotationConfigApplicationContext("AppConfig.java");
MemberService memberService = ac.getBean("memberSerivce", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}
그렇다면 XML은 어떻게 작성하는걸까?
2. XML 이용하여 Bean등록하기
여기도 하나씩 본다면
<bean id="Bean이름" class="Bean Class 위치">
<constructor-arg name="사용되는 매게변수 Bean 이름" ref="bean으로 선언된 이름">
</bean>
설명이 헷갈렸다면 아래 소스를 확인해보자
<?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>
자, 그렇다면 위 환경 설정 파일이 모두 잘 돌아가는지 확인해보자
public class XmlAppContext {
@Test
@DisplayName("Xml App Test")
void getXmlAppContext(){
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberSerivce", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}
}
ㅎㅎ! 잘돌아간다.
반응형
'스프링의 핵심원리 > 기본편' 카테고리의 다른 글
로그인 session, cookie 생성 (0) | 2022.04.23 |
---|---|
Validation 정리중 (0) | 2022.04.16 |
BeanFactory와 ApplicationContext (0) | 2022.02.26 |
스프링 빈 등록 테스트코드로 확인하기 (0) | 2022.02.26 |
스프링 빈 등록된것 테스트코드로 조회하는 방법 (0) | 2022.02.26 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Vuex
- vscode
- 영속성 컨텍스트
- 스트림
- 중간연산
- map
- container
- JPA
- webpack
- mvn
- NPM
- docker
- ApplicationContext
- 최종연산
- MAC
- 람다
- springboot
- 자바8
- Vue
- install
- stream
- AnnotationConfigApplicationContext
- ngnix
- 차이
- Intellij
- java
- elasticsearch
- BeanFactory
- nginx
- lambda
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함