- Spring IoC Container가 관리하는 Java 객체
- Spring에 의해 생성되고 관리되는 Java 객체
ApplicationContext.getBean()
와 같은 메소드를 이용하여 Spring Container로부터 Bean 객체를 얻어옴
- 객체들을 관리하는 공간
- Bean의 생성부터 소멸까지 관리
- Spring Container는 Bean을 정의한 Annotation 기반의 Java 파일 또는 XML을 기반으로 생성할 수 있음
@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 FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
@Configutation
: AppConfig
에 설정을 구성. @Bean
: Spring Container에 Spring Bean으로 등록. @Bean
이라 적힌 메서드를 모두 호출해서 반환된 객체를 Spring Container에 등록위 예제처럼 Annotation을 사용하는 방법에는 여러 가지가 존재한다.
<?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="gwshin.core.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository" />
</bean>
<bean id="memberRepository" class="gwshin.core.member.MemoryMemberRepository" />
<bean id="orderService" class="gwshin.core.order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository" />
<constructor-arg name="discountPolicy" ref="discountPolicy" />
</bean>
<bean id="discountPolicy" class="gwshin.core.discount.RateDiscountPolicy" />
</beans>
- Spring Container는 매개 변수로 넘어온
AppConfig
를 사용해서 Spring Bean을 등록한다.- Bean 이름은 기본적으로 메소드 이름을 사용하며, 아래와 같이 직접 지정할 수도 있다.
@Bean(name="memberService2")
- Spring Container는
AppConfig
를 사용하여 의존관계를 주입(DI)한다.
getBean()
메소드 제공ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext
: 스프링 컨테이너(interface)AnnotationConfigApplicationContext
: ApplicationContext
의 구현체AppConfig.class
: 클래스 설정 구성 정보