다양한 상황에서 프록시 사용법을 익히기 위해 3가지 상황으로 예제를 만들것임.
컨트롤러까지 인터페이스로 만들어서 저번처럼 예제를 만들었음.
여기서 하나 짤막상식. 스프링에서는 @Controller
말고도 @ReqeustMapping
애너테이션으로도 스프링 컨트롤러로 인식할 수 있다. 그리고 이 애너테이션들은 인터페이스에 달아줘도 된다.
RequestMapping
@ResponseBody
public interface OrderControllerV1 {
@GetMapping("/v1/request")
String request(@RequestParam("itemId") String itemId);
@GetMapping("/v1/no-log")
String noLog();
}
빈으로 수동등록하자.
@Configuration
public class AppV1Config {
@Bean
public OrderControllerV1 orderControllerV1(){
return new OrderControllerV1Impl(orderServiceV1());
}
@Bean
public OrderServiceV1 orderServiceV1() {
return new OrderServiceImpl(orderRepositoryV1());
}
@Bean
public OrderRepositoryV1 orderRepositoryV1(){
return new OrderRepositoryV1Impl();
}
}
그리고 configuration을 임포트해서 사용한다.
@Import(AppV1Config.class)
@SpringBootApplication(scanBasePackages = "hello.proxy.app") //주의
public class ProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyApplication.class, args);
}
}
이렇게 @Import()
하고 실행하면 컨피그가 적용된다.
@Import는 사실 별건 아니고 그냥 스프링 비능로 등록하는 애너테이션이다. 보통 위처럼 설정 파일을 등록할 때 사용함. 하지만 설정파일아니어도 그냥 스프링 빈으로 등록할때도 사용 가능.
그냥 @Configuration해도 빈으로 등록되는데 굳이 @Import 한이유는 아래의 이유때문에 config가 컴포넌트 스캔이 되지 않았기 때문임.