개발/Spring

[Spring DI] 3. Spring에서 두 개 이상의 설정 파일 사용하기

nova_dev 2020. 11. 8. 17:00
반응형

Spring 
Spring에서 두 개 이상 설정 파일 사용하기

앞의 포스터에서는 DI가 무엇인지, DI를 왜 사용해야 하는지 그리고 Spring에서는 어떤 식으로 DI를 사용하는지에 관해 알아보았다. 이번에는 Spring에서 두 개 이상의 설정 파일을 사용하는 방법을 알아보자.

 

 두 개 이상의 설정 파일 사용하기

스프링은 어플리케이션을 개발하다 보면 적게는 수십 개에서 많게는 수백여 개 이상의 빈을 설정하게 된다. 설정하는 빈의 개수가 증가하면 한 개의 클래스 파일에 설정하는 것보다 영역 별로 설정 파일을 나누면 관리하기가 편해진다.

스프링은 한 개 이상의 설정 파일을 이용해서 컨테이너를 생성할 수 있다. 

@Configuration
public class AppConf1 {

	@Bean
	public MemberDao memberDao() {
		return new MemberDao();
	}
	
	@Bean
	public MemberPrinter memberPrinter() {
		return new MemberPrinter();
	}
	
}
@Configuration
public class AppConf2 {
	@Autowired
	private MemberDao memberDao;
	@Autowired
	private MemberPrinter memberPrinter;
	
	@Bean
	public MemberRegisterService memberRegSvc() {
		return new MemberRegisterService(memberDao);
	}
	
	@Bean
	public ChangePasswordService changePwdSvc() {
		ChangePasswordService pwdSvc = new ChangePasswordService();
		pwdSvc.setMemberDao(memberDao);
		return pwdSvc;
	}
}

위와 같이 AppConf1과 AppConf2라는 컨피그 파일이 있을 때, AppConf2에서 AppConf1의 MemberDao와 MemberPrinter를 사용할 수 있다. 

@Autowired: 스프링의 자동 주입 기능을 위한 어노테이션. 해당 타입의 빈을 찾아서 필드에 할당한다.

설정 클래스가 두 개 이상이더라도 스프링 컨테이너를 생성할 때에는 아래와 같이 파라미터로 설정 클래스를 추가로 전달하면 된다. 물론, SpringBoot에서는 Application에 @SpringBootApplication을 달아 줄 경우, configuration내의 Bean들을 자동으로 탐색하여 스프링 컨테이너를 생성해주는 어노테이션이 포함되어 있기 때문에 해당 어노테이션을 달아주면 아래 컨테이너 생성에 어떤 컨피그가 들어가야 하는지를 신경쓰지 않아도 된다. 이에 관해서는 나중에 다른 포스트로 설명하도록 하겠다.

ctx = new AnnotationConfigApplicationContext(AppConf1.class, AppConf2.class);

만약 위와 같이 컨테이너를 생성할 때 Config 파일을 모두 파라미터 값으로 넘기고 싶지 않다면, 메인이 되는 Configuration에서 @Import 어노테이션을 사용하는 방법도 있다.

@Configuration
@Import({AppConf2.class})
public class AppConfImport {

	@Bean
	public MemberDao memberDao() {
		return new MemberDao();
	}
	
	@Bean
	public MemberPrinter memberPrinter() {
		return new MemberPrinter();
	}
}

@Import 안에는 배열을 이용하여 두 개 이상의 설정 클래스를 지정할 수도 있다.
@Import({AppConf1.class, AppConf2.class})

 

관련글

위 글은 스프링5 프로그래밍 입문 (저자: 최범균) 책을 공부하면서 작성한 글입니다. (링크)

[스프링 DI] 1. 스프링 DI(Dependency Injection)란? (링크)
[스프링 DI] 2. Spring DI 설정 (링크)
[스프링 DI] 3. Spring에서 두 개 이상의 설정 파일 이용하기 (링크)
[스프링 DI] 4. getBean() 메서드 사용과 Bean 관련 Exception 정리 (링크)

 
 

 

 

반응형