본문 바로가기
Java Spring

@Import 애노테이션의 쓰임

by GGShin 2022. 9. 11.

예전에 문득 'XXXConfig.class 파일들이 굉장히 많아지면 관리가 힘들겠다' 라는 생각을 한 적이 있었습니다.

그런데 오늘 Spring 공식 문서를 살펴보다가 @Import 애노테이션이라는 것을 보았고, 

이전에 의문을 가졌던 부분을 해당 애노테이션으로 어느 정도 보완이 된다는 것을 알게 되었습니다.

 

아래 예시는 공식 문서에 나온 예시입니다. 

 

@Configuration
public class ConfigA {

    @Bean
    public A a() {
        return new A();
    }
}

@Configuration
@Import(ConfigA.class) //이 부분!
public class ConfigB {

    @Bean
    public B b() {
        return new B();
    }
}

 

보면 ConfigB에 @Import(ConfigA.class)가 적혀 있는 것을 확인할 수 있습니다. 

이렇게 @Import를 해주면 ApplicationContext에 ConfigA와 ConfigB를 모두 등록할 필요 없이 ConfigB만 명시해주면 됩니다.

 

public static void main(String[] args) {
	//ConfigB.class만 명시해 주었습니다!
    ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class); 

    // now both beans A and B will be available...
    A a = ctx.getBean(A.class);
    B b = ctx.getBean(B.class);
}

 

ConfigB.class만 데이터로 넘겨주었는데도 ConfigA에 등록된 A bean도 사용할 수 있습니다. 

 

이걸 보고 역시 Spring team의 통찰력(?)에 감탄하기도 했고, 새로우면서도 편리한 애노테이션을 또 알게되어서 좋았습니다. :)

 


 

 

참고자료

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-java-bean-description

 

Core Technologies

In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do

docs.spring.io

 

반응형