이 프로젝트의 개발 환경
- 개발 언어 및 개발 환경
- OpenJDK 17
- 기타 환경
- macOS Sonoma 14.1.1
- IntelliJ IDEA 2020.3 Ultimate Edition
여러 개의 @Configuration 설정 클래스 등록: @Autowired
Spring 프로젝트에서는 적게는 수십 개에서 많게는 수백 여 개 이상의 Bean을 설정하게 됩니다.
설정하는 Bean이 많아지면 한 개의 설정 클래스 파일에서 관리하는 것보다는 Bean 성격에 맞게 분리 후 관리하는 것이 필요합니다.
이전 예제에서 작성한 chap03 패키지와 작성한 클래스를 모두 복사하여 chap03_b를 생성하고, AppContext를 AppContext1과 AppContext2로 분리합니다.
package chap03_b;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppContext1
{
@Bean
public MemberDao memberDao()
{
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter()
{
return new MemberPrinter();
}
}
AppContext2는 나머지 Bean을 관리합니다.
package chap03_b;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppContext2
{
@Autowired
private MemberDao memberDao;
@Autowired
private MemberPrinter memberPrinter;
@Bean
public MemberRegisterService memberRegSvc()
{
return new MemberRegisterService(memberDao);
}
@Bean
public ChangePasswordService changePwdSvc()
{
ChangePasswordService svc = new ChangePasswordService();
svc.setMemberDao(memberDao);
return svc;
}
@Bean
public MemberListPrinter listPrinter()
{
return new MemberListPrinter(memberDao, memberPrinter);
}
}
코드 | 비고 | |
Spring의 |
설정 클래스를 사용하려면 컨테이너를 먼저 생성해야합니다.
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext1.class);
여러 개의 설정 클래스를 사용하려면 컨테이너를 생성 할 때 인자로 모두 전달합니다.
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext1.class, AppContext2.class);
Spring은 @Configuration 어노테이션이 등록된 클래스를 설정 클래스로써 Bean에 등록합니다.
@Autowired 어노테이션이 등록된 필드는 설정 클래스에서 관리하는 Bean을 자동으로 찾아서 주입합니다.
여러 개의 @Configuration 설정 클래스 등록: @Import
여러 개의 설정 클래스를 등록하는 또 다른 방법은 @Import 어노테이션 사용입니다.
@Import은 설정 클래스에서 참조하고자 하는 다른 설정 클래스를 지정합니다.
이전 예제에서 작성한 chap03_b 패키지와 작성한 클래스를 모두 복사하여 chap03_c를 생성하고, AppContext1을 다음과 같이 수정합니다.
package chap03_c;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(AppContext2.class)
public class AppContext1
{
@Bean
public MemberDao memberDao()
{
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter()
{
return new MemberPrinter();
}
}
코드 | 비고 | |
설정 클래스가 어노테이션으로 지정한 다른 설정 클래스를 함께 사용합니다. |
AppContext1에서 참조하게 되므로 ApplicationContext 컨테이너는 AppContext2를 지정하지 않아도 됩니다.
AppContext2는 AppContext1에 의해서 컨테이너에서 함께 초기화됩니다.
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext1.class);
@Import 어노테이션에서 여러 개의 설정 클래스를 Import하려면 다음과 같이 사용합니다.
@Configuration
@Import( {AppContext1.class, AppContext2.class } )
public class AppContext
{
...
}
정리 및 복습
- 설정 클래스에는
@Configuration어노테이션을 등록합니다. - 설정 클래스를 사용하려면
ApplicationContext컨테이너에서 초기화합니다. - 여러 개 설정 클래스를 사용하려면 ApplicationContext 컨테이너에서 초기화 할 때 인자로 설정 클래스를 모두 전달합니다.
- 설정 클래스가 다른 설정 클래스의 Bean 객체를 가져다 쓰려면
@Autowire어노테이션을 등록한 필드를 사용합니다. - @Autowire은
Bean으로 등록된 객체를 자동으로 주입합니다. - 설정 클래스가 다른 설정 클래스를 함께 참조하려면
@Import어노테이션을 등록하여 클래스를 지정합니다. @Import로 지정된 설정 클래스는 ApplicationContext 컨테이너에서 직접 초기화 할 필요가 없습니다.
'Java > Spring' 카테고리의 다른 글
Spring 5 입문: Chapter 04. 자동 의존 주입 (0) | 2023.11.27 |
---|---|
@Configuration 어노테이션 개념과 특징 (0) | 2023.11.23 |
Spring 5 입문: Chapter 03A. Spring 의존 주입(DI, Dependency Injection) (0) | 2023.11.22 |
Spring Boot에서 실행되는 Tomcat 서버 포트 변경 방법 (0) | 2023.11.22 |
Spring.io 따라하기: RESTful 웹 서비스에 요청하기 (0) | 2023.11.22 |