AOP

이연희·2022년 7월 3일
0

Spring

목록 보기
56/105

AOP: Aspect Oriented Programming

관점지향 프로그래밍
공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)을 분리하는 것이다. 원하는 곳에 공통 관심 사항을 적용할 수 있다.

@Aspect
@Component
public class TimeTraceAop {
    @Around("execution(* hello.hellospring0629..*(..))")//패키지 하위에 다 적용해
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START: "+joinPoint.toString());
        try{
            Object result = joinPoint.proceed();
            return result;
        }finally {
            long finish = System.currentTimeMillis();
            long timeMs=finish-start;
            System.out.println("END: "+joinPoint.toString()+" "+timeMs+"ms");
        }
    }
}

실행 로그

가짜 스프링 빈을 앞에 세워두고 가짜 스프링 빈이 끝나면 이후에 진짜 스프링 빈이 동작한다.

실제로 proxy가 주입되는지 콘솔에서 출력해서 확인

@Autowired
public MemberController(MemberService memberService) {
    this.memberService = memberService;
    System.out.println("memberService="+memberService.getClass());
}

실행 결과

memberService=class hello.hellospring0629.service.MemberService$$EnhancerBySpringCGLIB$$52476d8c

DI를 해주니까 프록시가 가능 -> 객체를 주입받는 형태이기 때문에 프록시도 사용할 수 있는 것

profile
공부기록

0개의 댓글