Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Proxy
- db
- springdatajpa
- transaction
- 그리디
- Android
- AOP
- jpa
- QueryDSL
- 스프링 핵심 기능
- 알고리즘
- java
- 자바
- SpringBoot
- kotlin
- Greedy
- 스프링 핵심 원리
- spring
- 인프런
- Thymeleaf
- http
- 스프링
- pointcut
- 백준
- 김영한
- JPQL
- JDBC
- Exception
- Spring Boot
- Servlet
Archives
- Today
- Total
개발자되기 프로젝트
Proxy Pattern - V2 본문
- v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록
- 이번에는 인터페이스가 없는 Controller , Service , Repository 를 스프링 빈으로 수동 등록해보자.
1. OrderRepositoryV2
public class OrderRepositoryV2 {
public void save(String itemId) {
if(itemId.equals("ex")){
throw new IllegalStateException("예외 발생");
}
sleep(1000);
}
private void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2. OrderServiceV2
public class OrderServiceV2 {
private final OrderRepositoryV2 orderRepository;
public OrderServiceV2(OrderRepositoryV2 orderRepository) {
this.orderRepository = orderRepository;
}
public void orderItem(String itemId) {
orderRepository.save(itemId);
}
}
3. OrderControllerV2
@Slf4j
@RequestMapping
@ResponseBody //component scan피하려고 @Conroller 안씀.
public class OrderControllerV2 {
private final OrderServiceV2 orderService;
public OrderControllerV2(OrderServiceV2 orderService) {
this.orderService = orderService;
}
@GetMapping("/v1/request")
public String request(String itemId) {
orderService.orderItem(itemId);
return "ok";
}
@GetMapping("/v1/no-log")
public String noLog() {
return "ok";
}
}
- @RequestMapping
- 스프링MVC는 타입에 @Controller 또는 @RequestMapping 애노테이션이 있어야 스프링 컨트롤러로 인식한다.
- 그리고 스프링 컨트롤러로 인식해야, HTTP URL이 매핑되고 동작한다.
- 그런데 여기서는 @Controller 를 사용하지 않고, @RequestMapping 애노테이션을 사용했다.
- 그 이유는 @Controller 를 사용하면 자동 컴포넌트 스캔의 대상이 되기 때문이다.
- 여기서는 컴포넌트 스캔을 통한 자동 빈 등록이 아니라 수동 빈 등록을 하는 것이 목표다.
- 따라서 컴포넌트 스캔과 관계 없는 @RequestMapping 를 타입에 사용했다.
4. 스프링 빈 수동 등록
- 메서드 명으로 등록됨
@Configuration
public class AppV2Config {
@Bean
public OrderControllerV2 orderControllerV2(){
return new OrderControllerV2(orderServiceV2());
}
@Bean
public OrderServiceV2 orderServiceV2(){
return new OrderServiceV2(orderRepositoryV2());
}
@Bean
public OrderRepositoryV2 orderRepositoryV2(){
return new OrderRepositoryV2();
}
}
5. 실행
@Import({AppV1Config.class, AppV2Config.class})
@SpringBootApplication(scanBasePackages = "hello.proxy.app") //주의
public class ProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyApplication.class, args);
}
}
6. GitHub :211123 Proxy 2
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
요구사항 추가 (0) | 2021.11.23 |
---|---|
Proxy Pattern - V3 (0) | 2021.11.23 |
Proxy Pattern - V1 (0) | 2021.11.23 |
정리 및 한계 (0) | 2021.11.23 |
Template CallBack - 2 (0) | 2021.11.22 |
Comments