JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[토비의 스프링] 7.6.4_정적 중첩 클래스를 이용한 프로파일 적용 #133

Closed kjsu0209 closed 2 years ago

kjsu0209 commented 2 years ago

책 695p 리스트 7-121을 보시면 AppContext 안에 환경별 설정 클래스를 중첩 클래스로 넣어 주었는데요, 둘 다 @Configuration 어노테이션을 갖고 있습니다. AppContext클래스 위에만 @ComponentScan이 있는 것을 보면 outer class의 어노테이션이 inner class에도 적용되는 것 같아 보이는데, 왜 @Configuration은 둘 다 붙어 있을까요? inner class는 outer class를 거쳐야만 접근할 수 있지 않나요?

아래는 해당 코드입니다.

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages="springbook.user")
@Import(SqlServiceContext.class)
public class AppContext{
   ...

   @Configuration
   @Profile("production")
   public static class ProductionAppContext {
      ...
   }
taxol1203 commented 2 years ago

제 생각에는, ProductionAppContextTestAppContext와 같은 설정 클래스에 만약 @Configuration이 없으면, 설정 파일로 인식하지 못하게 될 것이라 생각됩니다. 이 클래스가 설정 클래스인지, 빈 클래스인지 아님 그냥 내부에 있는 클래스인지 구분하기 위해서 등록하지 않았을까 생각합니다.

한번 코드에서 @Configuration 애노테이션을 제거하고 테스트를 진행하면, 오류가 생기지 않나요?

kjsu0209 commented 2 years ago

상속을 하지 않았으니까 두 클래스는 분리된 클래스로 생각하는 게 맞네요! 이해했습니다.