[Spring Web MVC] Configuration 관리하기 (@Import)
1. @Autowired Annotation이란?
Spring Framework를 이용해서 앱을 개발하다보면 수십~수백개 이상의 빈을 설정하게 될텐데, 당연히 이러한 설정을 클래스 파일 하나에 다 담아야 하는 것은 아닙니다. 영역별로 설정 파일을 나누면 관리하기도 쉽고 가독성도 좋아집니다. 나누어진 설정 클래스를 가지고 @Autowired와 @Import를 살펴보겠습니다.
Spring MVC는 한 개 이상의 설정 파일을 이용해서 컨테이너를 생성할 수 있습니다. 다음은 첫 번째 설정 클래스입니다.
@Configuration
public class AppConf1 {
// 메서드명은 해당 빈의 이름이고, 생성되어 반환되는 객체가 바로 Bean 객체입니다.
@Bean
public MemberDao memberDao() { return new MemberDao(); }
@Bean
public MemberPrinter memberPrinter() { return new MemberPrinter(); }
}
이어서 두 번째 설정 클래스를 보겠습니다. 두 번째 설정 클래스에서는 첫 번째 설정 클래스에 있는 빈 객체를 사용하는데 이 때, @Autowired를 이용해 Spring Container에서 해당 타입의 빈 객체를 가져옵니다.
@Configuration
public class AppConf2 {
@Autowired // 스프링 컨테이너에서 MemberDao 타입의 빈 객체를 찾아 주입한다.
private MemberDao memberDao;
@Autowired // 스프링 컨테이너에서 MemberPrinter 타입의 빈 객체를 찾아 주입한다.
private MemberPrinter memberPrinter;
@Bean
public MemberRegisterService memberRegSvc() { return new MemberRegisterService(memberDao); }
@Bean
public ChangePasswordService changePwdSvc() {
ChangePasswordService pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
return pwdSvc;
}
@Bean
public MemberListPrinter listPrinter() { return new MemberListPrinter(memberDao, memberPrinter); }
@Bean
public MemberInfoPrinter infoPrinter() {
MemberInfoPrinter infoPrinter = new MemberInfoPrinter();
infoPrinter.setMemberDao(memberDao);
infoPrinter.setPrinter(memberPrinter);
return infoPrinter;
}
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
위 코드에서 보는 것처럼 @Autowired Annotation을 붙이면 Spring Container에서 해당 타입의 빈을 주입받습니다.
다음으로 위의 2개의 설정 클래스를 이용해 스프링 컨테이너를 생성하는 코드는 다음과 같습니다.
ApplicationContext ctx = null;
// AnnotationConfigApplicationContext 클래스의 생성자는 가변 인자이기 때문에
// 설정 클래스 목록을 아래와 같이 콤마로 구분해서 전달한다.
ctx = AnnotationConfigApplicationContext(AppConf1.class, AppConf2.class);
2. @Import Annotation이란?
설정 파일도 클래스의 상속계층처럼 어떠한 계층을 가질 수는 없을까요🤔?
물론 있습니다. 두 개 이상의 설정 파일을 서로 연결시키는 방법은 @Import 애노테이션을 사용하는 것입니다.
@Import를 사용하면 설정 파일간의 계층을 만들 수 있습니다.
@Configuration
@Import( {AppConf1.class, AppConf2.class} ) // AppConf1, AppConf2 두 가지 설정 클래스를 포함시킨다.
public class AppConfImport {
@Bean
public MemberDao memberDao() { return new MemberDao(); }
@Bean
public MemberPrinter memberPrinter() { return new MemberPrinter(); }
}
'Web > Spring Web MVC' 카테고리의 다른 글
[Spring Framework] Spring Web MVC (0) | 2019.09.14 |
---|---|
[Spring JDBC] JdbcTemplate 클래스 (0) | 2019.09.08 |
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP (0) | 2019.09.07 |
[Spring Framework] Component Scan (0) | 2019.09.07 |
[Spring MVC] @Autowired 애노테이션의 필수 여부 (0) | 2019.09.07 |
댓글
이 글 공유하기
다른 글
-
[Spring JDBC] JdbcTemplate 클래스
[Spring JDBC] JdbcTemplate 클래스
2019.09.08 -
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP
2019.09.07 -
[Spring Framework] Component Scan
[Spring Framework] Component Scan
2019.09.07 -
[Spring MVC] @Autowired 애노테이션의 필수 여부
[Spring MVC] @Autowired 애노테이션의 필수 여부
2019.09.07