Spring @Import 어노테이션

Spring의 Import 어노테이션에 대해 알아보자.

아래는 Spring 5의 Import 어노테이션에 대한 문서이다.
(4.x와 5.x의 스펙변경은 없는듯…)

Indicates one or more @Configuration classes to import.

Provides functionality equivalent to the <import/> element in Spring XML. Allows for importing @Configuration classes, ImportSelector and ImportBeanDefinitionRegistrarimplementations, as well as regular component classes (as of 4.2; analogous to AnnotationConfigApplicationContext.register(java.lang.Class<?>...)).

@Bean definitions declared in imported @Configuration classes should be accessed by using @Autowired injection. Either the bean itself can be autowired, or the configuration class instance declaring the bean can be autowired. The latter approach allows for explicit, IDE-friendly navigation between @Configuration class methods.

May be declared at the class level or as a meta-annotation.

If XML or other non-@Configuration bean definition resources need to be imported, use the @ImportResource annotation instead.

Since:3.0

  • import 할 하나이상의 클래스를 명시한다.
    (어노테이션 value는 Class 배열로 되어있다.)
  • Spring XML의 Import 엘리먼트와 동일한 기능을 제공한다.
  • Configuration 어노테이션 클래스 및 ImportSelector, ImportBeanDefinitionRegistrar 구현체 와 일반 컴포넌트 클래스
    를 허용한다.
    (일반 컴포넌트 클래스 -> 4.2 현재, AnnotationConfigApplicationContext.register (java.lang.Class <?> …)와 유사)
  • Import한 @Configuration 클래스에서 선언 된 @Bean 정의는 @Autowired injection을 사용하여 액세스해야 한다.
  • XML 또는 Non-@Configuration 클래스를 사용하는 경우 @ImportResource 를 사용하자.

import에서 허용하는 클래스에 대해 살펴보자.
테스트를 위해 간단히 String Type 의 Bean을 등록할것이다.

  • 일단 @Configuration 어노테이션 클래스가 허용되며
    내부에 작성된 Bean 들도 사용할수 있다.
  • ImportSelector 인터페이스를 구현한 구현체도 사용이 가능하며
    아래 와 같이 @Configuration 클래스 명을 명시하여 import select 지정이 가능하다.
  • ImportBeanDefinitinoRegistrar 를 구현한 구현체도 사용이 가능하다.
    아래와 같이 작성할수 있겠다.

위의 세가지 타입에 대해 Import어노테이션에 지정하여 테스트 해보자.

import 어노테이션으로 3가지 타입의 클래스를 명시하였다.
Import 어노테이션은 어노테이션에도 명시가 가능하여 EnableTest 어노테이션에 적용하였고.
SpringBootApplication 에 작성된 EnableTest 어노테이션을 적용하여 확인할수 있다.

출력:

SpringBoot의 EnableAutoConfiguration어노테이션 등에서도 사용되고 있고
다양한 써드 파티 라이브러리에서도 해당 라이브러리 enable을 위해 @Enable… 등으로 명시하여 Import 적용된 어노테이션을 제공하고있다.

Non-@Configuration 때 사용하는 ImportResource는 다음에…

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store