springboot IoC 컨테이너 응용: 리팩토링

Y39·2023년 3월 16일
0

TIL

목록 보기
10/15

spring boot Ioc 컨테이너를 이용한 리팩토링

[기존]
@Controller
@AllArgsConstructor
public class MemberController{
	MemberService service;
   //@Service 어노테이션을 붙인 상태
   //Ioc 주입성이 이미 되고 있음
  @ResponseBody
  @GetMapping("/member/login")
  public RsCode login(HttpServletRequest rq, HttpServletResponse rs) {
     RQ rrqq = new RQ(rq, rs);
     rrqq.getCookie("hi");
     //RQ는 쿠키를 set, get, remove하는 기능
  }
}

  @ResponseBody
  @GetMapping("/member/me")
  public RsCode checkMe(HttpServletRequest rq, HttpServletResponse rs) {
     RQ rrqq = new RQ(rq, rs);
     rrqq.getCookie("ho");
     //RQ는 쿠키를 set, get, remove하는 기능
  }
  
  /** 살펴봐야할 점
  *1. 매번 RQ 객체를 생성한다.
  *2. 매번 parameter에 HttpServletRequest, Response를 받아야 한다.
  **/
  • IoC를 통해 RQ를 관리 하고자 하는 이유

    • RQ 사용을 위해서 반복적인 부분을 개선하기 위해
    • RQ의 생명주기를 자동으로 관리하기 위해
    [리팩토링]
    
    @Controller
    @AllArgsConstructor
    public class MemberController{
    	MemberService service;
        RQ rrqq;
       //RQ 클래스에 @Component 와 @RequestScope 어노테이션 붙임
       //@RequestScopte를 붙이는 이유
         /*
         *1. RQ는 service와 다르게 생명주기가 짧음
           service: 프로그램 시작~ 끝
           RQ: Request ~ Response
         *2. 그래서 생명주기가 Request에 달려있다고 표시
         */
       
      @ResponseBody
      @GetMapping("/member/login")
      public RsCode login() {
      //parameter에 HttpServletRequest, Response 없어짐
      // IoC가 알아서 RQ 생성시 넣어주기 때문
      //RQ 생성자도 없어짐
      //IoC가 알아서 생성해주기 때문에
         rrqq.getCookie("hi");
        
      }
    }
    
      @ResponseBody
      @GetMapping("/member/me")
      public RsCode checkMe() {
         rrqq.getCookie("ho");
         
      }
  • 추가

    • @Component와 @Service의 차이
      • 둘다 IoC에서 관리해야 하는 것이라는 어노테이션
      • Service는 MVC의 주요 기능인 Service임을 명확하게 명시해주는 어노테이션이라는 차이점이 있음.
profile
System.out.print("Bold")

0개의 댓글