- 애노테이션 기반 자바 코드 설정 사용
- new AnnotationConfigApplicationContext(AppConfig.class)
@Configuration //설정정보
public class AppConfig {
@Bean //스프링 컨테이너에 등록ㄴ
//애플리케이션의 실제 동작에 필요한 구현 객체를 생성
//생성한 객체 인스턴스의 참조(레퍼런스)를 생성자를 통해서 주입(연결)
//메서드 이름만으로도 역할과 전체구성을 알 수 있도록 리팩토링(중복제거, 이후 구현체 변경시에도 변경코드 축소)
public MemberService memberService() {
return new MemberServiceImpl(memberRepository()); //생성자 주입
}
@Bean
private static MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy(); //변경시 구성 영역만 변경하면 OK (사용영역에 변경 영향 x)
}
}
- XML 설정 사용
- 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는 편
- GenericXmlApplicationContext
<?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>