[Spring] 스프링 빈 설정

null·2023년 6월 29일
0

Spring

목록 보기
7/7

  • 자바 코드 설정 사용
    : new AnnotationConfigApplicationContext(AppConfig.class) 를 사용하여 설정 정보를 넘긴다
@Configuration
public class AppConfig {

	// 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록 -> 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 함
	@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 FixDiscountPolicy();
		return new RateDiscountPolicy();
	}
}

------------------------------------------------------------------------------------------------
public class ApplicationConfigContextInfoTest {

	
	AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
    
    //생략
}
  • xml 설정 사용: 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-4.3.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
	void xmlAppContext() {
		ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");

		MemberService memberService = ac.getBean("memberService", MemberService.class);
		assertThat(memberService).isInstanceOf(MemberService.class);
	}

}

[출처]스프링 핵심 원리-스프링 컨테이너와 스프링 빈 - 인프런 김영한

0개의 댓글