상세 컨텐츠

본문 제목

4_PetClinic스프링부트 프로젝트

JSP·자바·코틀린

by 김일국 2020. 1. 12. 17:00

본문

스프링부트 2.x PetClinic 웹프로젝트를 가지고, 기술정리를 해봅니다.

공통: 스프링부트 2.x, Hsql dB, 인텔리J 개발툴, Maven 빌드툴 사용.

기존 Owners컨트롤러 클래스 소스에 메서드 실행시간 log로 표시하는 AOP 프록시패턴기능 추가.


-OwnerController.java 파일 - Owners컨트롤러의 메소드 타켓 애노테이션명 @LogExecutionTime(아래)

@GetMapping("/owners/new")
@LogExecutionTime // AOP 기능
public String initCreationForm(Map<String, Object> model) {
// AOP 기능-프록시 패턴 으로변경 Start
//StopWatch stopWatch = new StopWatch();
//stopWatch.start();
// AOP 기능-프록시 패턴 으로변경 End
Owner owner = new Owner();
model.put("owner", owner);
// AOP 기능-프록시 패턴 으로변경 Start
//stopWatch.stop();
//System.out.println(stopWatch.prettyPrint());
// AOP 기능-프록시 패턴 으로변경 End
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}

- LogExecutionTime.java 파일-애노테이션 생성파일(아래)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

- LogAspect.java파일 - 매서드 실행시간 로그 출력 구현클래스 생성(아래)

@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object proceed = joinPoint.proceed();
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
return proceed;
}

(아래 작업결과)

- 지금까지 작업한 파일

20200112spring-petclinic.zip


Ps.

지금까지 스프링 3대 기술중 2가지

- IoC(반전의명령: IoC컨테이너가 생성될때 @ComponentScan으로 Bean클래스 등록해서 사용)

- AOP(관점지향프로그래밍: 프록시패턴을 이용해서 매서드 주의Around에 DI주입)

마지막 3째는

- PSA(포터블 서비스 Abstract추상화:

  Spring MVC(@Controller로 서블릿자동 생성), 트랜잭션(@Transactional), 캐시(@Cacheable) 등으로 복잡한 서비스를 단순하게 추상화해서 사용합니다.

) 예는 아래처럼 Java Servlet을 사용하는 것을 스프링MVC(spring-boot-starter-web 디펜던시)의 @Controller 애노테이션으로 대체 합니다.

- HttpServlet을 상속받아서 doGet, doPost매서드 사용(아래)

// /owner/create
public class OwnerCreateServlet extends HttpServlet {
//GET
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
//POST
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}

- 스프링MVC(spring-boot-starter-web 디펜던시) 의 @Controller > @GetMapping, @PostMapping 애노테이션 사용(아래)

@GetMapping("/owners/new")
@LogExecutionTime // AOP 기능
public String initCreationForm(Map<String, Object> model) {
Owner owner = new Owner();
model.put("owner", owner);
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}

@PostMapping("/owners/new")
public String processCreationForm(@Valid Owner owner, BindingResult result) {
if (result.hasErrors()) {
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
else {
this.owners.save(owner);
return "redirect:/owners/" + owner.getId();
}
}


20200112spring-petclinic.zip
0.49MB

'JSP·자바·코틀린' 카테고리의 다른 글

2/3No프레임웍 jsp  (0) 2020.01.20
1/3No프레임웍 jsp  (0) 2020.01.19
3_PetClinic스프링부트 프로젝트  (0) 2020.01.09
2_PetClinic스프링부트 프로젝트  (0) 2020.01.08
1_PetClinic스프링부트 프로젝트  (0) 2020.01.07

관련글 더보기

댓글 영역