Spring Framework

남영민·2021년 3월 7일
0

SpringBoot

목록 보기
2/4

두 번째 내용은 스프링 프레임워크입니다.

  1. IoC 패턴 활용
  • 의존성 주입을 통해 의존성에 필요한 행위들을 생략할 수 있다.
    • 스프링이 클래스들의 인스턴스화를 대신 해주므로 상속을 받은 구현체 클래스들을 개별적으로 new 연산자로 생성하지 않아도 활용 할 수 있다.
  1. 스프링 JavaConfig
  • 스프링 컨테이너에 빈(bean)을 등록하고 설정하는 방법은 XML과 어노테이션 두 가지가 있다.
    - 빈(bean) : Spiring IoC 컨테이너가 관리하는 자바 객체. ApplicationContext.getBean() 으로 얻을 수 있음
  • JavaConfig를 활용하여 자바 코드만으로 스프링 컨테이너 설정 가능
@Configuration
@Import(CompanyConfig.class)
public class BeanConfig {
    @Bean
    public WorkManager employee() {
        return new Employee();
    }

    @Bean
    public WorkManager boss() {
        return new Boss();
    }

    @Bean
    public WorkService yourWorkService() {
        WorkService workService = new WorkService();
        workService.setWorkManager(employee());
        return workService;
    }

    @Bean
    public WorkService myWorkService() {
        WorkService workService = new WorkService();
        workService.setWorkManager(boss());
        return workService;
    }
}
  1. 스프링MVC
  • Front Controller 패턴에 Spring의 의존선 주입을 이용해 컴포넌트들의 생명 주기를 관리할 수 있는 컨트롤러 중심의 웹 MVC 프레임워크
  • 구조

  1. 컨트롤러
  • DispatchServlet 설정을 기반으로 Http 요청을 처리
@Controller
public class IndexController {
    @RequestMapping("/")
    public ModelAndView home() {
        ModelAndView mv = new ModelAndView("home");
        mv.addObject("title", "Jpub Spring WEB");
        mv.addObject("today", new Date().toString());
        System.out.println("index 컨트롤러");
        return mv;
    }
}
5. 인터셉터
	- 컨트롤러가 요청을 처리하기 전 혹은 후에대에 로직을 추가
    - filter : Dispatcher Servlet 실행 이전에 동작 / Interceptor : Dispatcher Servlet 실행 이후 적용
    
    
public class ExecuteTimeInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        long startTime = System.currentTimeMillis();
        request.setAttribute("startTime", startTime);

        String reqUri = request.getRequestURI();
        System.out.println("reqUri: " + reqUri);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        long startTime = (Long)request.getAttribute("startTime");
        long endTime = System.currentTimeMillis();
        long executeTime = endTime - startTime;

        request.setAttribute("executeTime", executeTime);
        System.out.println("[" + handler + "] executeTime : " + executeTime + "ms");
    }
}

내용 출처 : 윤석진. (2018). 스프링 부트로 배우는 자바 웹 개발. 주식회사 제이펍

profile
성장하는 개발자

0개의 댓글