시작


스프링부트 어노테이션을 살펴보다가 Import 어노테이션이 달려 있는 것을 보았는데 제대로 알고 있지 않은 것 같아서 알아보았다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration { ... }

정리


@Import

스프링에서는 빈을 등록하는 방식이 크게 두가지가 있다.

  1. XML 방식
  2. 자바 코드 방식

@Import 어노테이션은 자바 코드 방식의 일부이며, 하나 이상의 @Configuration 클래스, @Component 심지어 빈이 아닌 클래스를 import 할 수 있도록 도와준다.

@Configuration
@Import({DatabaseConfig.class, UserService.class, NotBeanClass.class})
public class MainAppConfig {
    // main configuration code here
}

위 같은 방식으로 MainAppConfig를 등록하면 자동으로 DatabaseConfig, UserService, NotBeanClass 를 끌어올 수 있게 해준다. 여기서 핵심은 끌어온 클래스들이 ComponentScan 대상이 아닌 경우 끌어온다는 것이다.