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})
관련글
'개발 > Spring' 카테고리의 다른 글
[Spring 프로젝트] Spring AOP 로거 개발 가이드 (0) | 2020.11.09 |
---|---|
[Spring DI] 4. getBean() 메서드 사용과 Bean 관련 Exception 정리 (0) | 2020.11.08 |
[Spring DI] 2. Spring DI 설정 (0) | 2020.11.08 |
[Spring DI] 1. 스프링 DI(Dependency Injection)란? (0) | 2020.11.08 |
[Spring 프로젝트] 예외 처리 가이드 (0) | 2020.11.06 |