스프링부트 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;
}
(아래 작업결과)
- 지금까지 작업한 파일
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();
}
}
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 |
댓글 영역