스프링 컨테이너와 빈

justindevcode·2023년 3월 13일
0

스프링부트

목록 보기
35/39
post-thumbnail

스프링 컨테이너와 빈


객체 지향 설계의 사용을 도와주는 스프링 컨테이너

이전 포스트로 객체지향적으로 외부 앱설정이라는 클레스에서 한 클레스가 부모인터페이서의 어떤 구현체를 사용할것인가를 조립해주는 클레스를 따로 만드었다.

스프링은 이와같은 구조를 내부적으로 잘 정리되게 지원한다 그것이 스프링 컨테이너와 빈이다.

@Configuration
public class AppConfig {

	@Bean
	public MemberService memberService() {
		return new MemberServiceImpl(memberRepository());
	}

	@Bean
	public MemoryMemberRepository memberRepository() {
		return new MemoryMemberRepository();
	}

	@Bean
	public OrderService orderService() {
		return new OrderServiceImpl(memberRepository(), discountPolicy());
	}

	@Bean
	public DiscountPolicy discountPolicy() {
		//return new FixDiscountPolicy();
		return new RateDiscountPolicy(); //이것만 바꾸면 할인정책변경가능
	}
}

@Configuration어노테이션으로 스프링 컨테이너로 지정될 클레스를 선택하고 @Bean어노테이션으로 스프링 컨테이너의 빈 저장소로 함수들을 등록할 수 있다.

이런 기본적인 등록이 완료된후에 이전에는 위의 설정을 사용하려면 그냥

//실행함수(main등)
Appconfig appConfig = new Appconfig();
MemberService memberService = appConfig.memberService();

이런식으로 설정 클레스를이용해서 실제로 생성하였다


하지만 스프링 컨테이너를 사용하면

//AppConfig에 어노테이션 추가하면 그쪽 설정들 ApplicationContext저장됨 이제 여기서 가져오는것임
		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(
			AppConfig.class);
		MemberService memberService = applicationContext.getBean("memberService",
			MemberService.class);

ApplicationContext라는 쪽에 저장되어서 여기서 꺼내고 사용할 수 있다. 여기서 설정들을 하나씩 써내쓸 수 있는것이다.

스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법은

ac.getBean(빈이름, 타입)
ac.getBean(타입)

정도가 있다.

profile
("Hello World!");

0개의 댓글