IT/development

[springBoot] Spring AOP simple source

알 수 없는 사용자 2023. 10. 19. 22:17
반응형

목차

    RestController 😄

    package study.springaoptest.web;
    
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.*;
    import study.springaoptest.model.User;
    import study.springaoptest.service.TestService;
    
    @RestController
    @Slf4j
    @RequestMapping("/api/v1/user")
    @RequiredArgsConstructor
    public class TestRestController {
    
        private final TestService testService;
    
        @GetMapping("")
        public void list() {
            testService.list();
        }
    
        @PostMapping("")
        public void post(@RequestBody User user) {
            testService.post();
        }
    
        @DeleteMapping("")
        public void delete() {
            testService.delete();
        }
    
        @PutMapping("")
        public void update() {
            testService.update();
        }
    }

    Service 😎

    package study.springaoptest.service;
    
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Service;
    
    @Service
    @Slf4j
    @RequiredArgsConstructor
    public class TestService {
    
    
        public void post() {
            log.info("등록~");
        }
    
        public void list() {
            log.info("조회~");
        }
    
        public void delete() {
            log.info("삭제");
        }
    
        public void update() {
            log.info("수정");
        }
    }

    Vo 😙

    package study.springaoptest.model;
    
    import lombok.Data;
    
    @Data
    public class User {
    
        private Long id;
        private String name;
    }

    Aop 🤗

    package study.springaoptest.aop;
    
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Slf4j
    @Component
    public class LogAspect {
    
        @Around("execution(* study.springaoptest.service..*.*(..))")
        public Object logging(ProceedingJoinPoint joinPoint) throws Throwable{
            log.info("Begin Method~");
            Object result = joinPoint.proceed();
            log.info("end Method~");
            return result;
        }
    }

    결과 🙄

    post request
    put request

    공통관심사인 2개의 로그를 찍는 기능을 AOP를 이용해 서비스의 모든 메서드에 적용했다.

    해당 패키지의 서비스에 작성하는 모든 메서드 실행 시 저 로그가 찍힌다.


    개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

    틀린 점 있을 경우 댓글 부탁드립니다.

    reference

     

    [spring boot] AOP

    Spring boot에서 AOP 사용해보기

    zkdlu.github.io

     

    반응형