SpringBoot에서 만들어준 것과 같은 환경으로 작성하기 → @MySpringBootApplication
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Configuration
@ComponentScan
public @interface MySpringBootApplication {
}
@Retention(RetentionPolicy.*RUNTIME*)
default값은 CLASS인데 왜 RUNTIME으로 주는이유?
애너테이션 정보가 컴파일된 클래스 파일까지는 살아있지만 애너테이션이 달린 클래스를 런타임에 메모리로 로딩할 땐 그 정보가 사라지기 때문에 런타임까지 정보가 유지되도록 Retention을 RUNTIME으로 지정하는 것
@Target(ElementType.*TYPE*)
TYPE은 어떤 것들이 해당될까?
클래스, 인터페이스, enum 3종류의 대상에게 부여할 수 있는 애너테이션을 지정할 때 사용
@MySpringBootApplication
public class HellobootApplication {
@Bean
public ServletWebServerFactory servletContainer() {
return new TomcatServletWebServerFactory();
}
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
public static void main(String[] args) {
SpringApplication.run(HellobootApplication.class, args);
}
}
@Configuration
public class Config {
@Bean
public ServletWebServerFactory servletContainer() {
return new TomcatServletWebServerFactory();
}
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
}
@Configuration
왜 @Component
를 달아주지 않고 @Configuration
을 달아줬을까?
@Component
를 가지고 있음