Spring AOP

2134 ワード

AOP


AOPが必要

  • のすべてのメソッドの呼び出し時間を測定します.
  • 共通注目点(横断注目点)とコア注目点(コア注目点)
  • 会員登録時間、会員照会時間を測定します.
  • AOPの適用

  • AOP: Aspect Oriented Programming
  • 共通注目点とコア注目点の分離
  • 
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component // 쓰거나 아니면 bean으로 등록
    public class TimeTraceAop {
    
        @Around("execution(* hello.hellospring..*(..))") // 적용할 부분 설정
        public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
            long start = System.currentTimeMillis();
            System.out.println("START"+joinPoint.toString());
            try {
                return joinPoint.proceed(); // 다음 method로 진행
            } finally {
                long finish = System.currentTimeMillis();
                long timeMs = finish-start;
                System.out.println("End"+joinPoint.toString()+" "+timeMs+"ms");
    
            }
    
        }
    }
    aopがある場合は、偽メンバーサービス(エージェント)、JoinPointを作成して実行します.プロセス()を実行すると、実際のMemberSerivceが実行されます.
    エージェントが実行中であることを確認できます.
    @Autowired
        public MemberController(MemberService memberService) {
            this.memberService = memberService;
            System.out.println("memberService = "+ memberService.getClass());
        }
    결과
    STARTexecution(MemberService hello.hellospring.SpringConfig.memberService())
    Endexecution(MemberService hello.hellospring.SpringConfig.memberService()) 13ms
    memberService = class hello.hellospring.service.MemberService$$EnhancerBySpringCGLIB$$71033579
    memberService = class hello.hellospring.service.コードは、M e m b e r v e r i c e n h a n cerBySpringCGLIBySpringCGLIB 71033579->MemberSerivceをコピーして操作します.
    Ref:
    *金英漢の春入門-Spring Boot、Web MVC、DBアクセス技術をコードで学ぶ