AOP @Around 이해하기
<SampleAdvice> - AOP 기능 클래스
@Component - 스프링의 빈으로 인식 되기 위해 설정
root-context.xml 인식할 수 있게 scan될 수 있도록 패키지 입력
<context:component-scan base-package="com.encore.aop"></context:component-scan>
@Aspect - AOP 기능을 하는 클래스를 선언
@Before("execution(* com.encore.service.MsgService*.*(..))") - service 패키지 안의 MsgService 클래스 중 메소드가 실행되기 전에 실행된다
ARC에서 실행하면 controller를 거쳐서 메소드 addMsg가 실행되는데 SampleAdvice에서 startLog 메소드가 실행되고 addMsg가 실행된다.
<ARC>
<MsgController>
<MsgServiceImpl>
Controller에서 addMsg를 호출하고 service.addMsg(msg); 를 실행하면 MsgServiceImpl의 메소드 addMsg가 실행된다 tbl_msg에 데이터를 넣어주고 tbl_user에 userpoint에 senderid에 10점을 추가한다
<출력값>
SampleAdvice의 startLog 메소드가 실행되고 MsgController의 addMsg가 실행되고 MsgServiceImpl addMsg메소드가 실행되면서 addMsg>> (이하 생략) 이 나오게 된 것이다.
----------------------------------------------------------------------------------------
<ARC>
SEND를 누르면??
<MsgController>
readMsg메소드를 실행할려고 하면 AOP의 timeLog메소드가 실행된다 Around는 메소드 호출 이전과 이후 모두 적용이 된다
<SampleAdvice>
jp.proceed(); 는 targetMethod를 실행하라는 의미!! @Around가 표시된 메소드가 Controller에서 호출된 메소드 앞과 뒤에 배치되는 것이 아니라 jp.proceed(); 코드 전이 호출 되기 전 실행하는 부분이고 그 뒤가 메소드가 호출 되고 나서 실행되는 부분인 것이다.
<MsgServiceImpl>
Controller에서 readMsg가 실행되면 serviceImpl의 readMsg가 실행되고 readMsg>>gildong,2가 찍힌다 메소드 실행이 끝나면 @Around로 돌아가서 나머지 부분을 출력한다
result결과 값은 serviceImpl의 readMsg의 결과 값을 받은 것으로 MsgVo이다
'Spring' 카테고리의 다른 글
"쿠키를 이해하려면 세션부터 알아야 한다?" (0) | 2018.09.11 |
---|---|
"DTO와 VO의 차이는?" (0) | 2018.09.11 |
"Spring DAO와 Service 메소드 명은 왜 다를까?" (0) | 2018.09.06 |
"Spring DTD mapper와 config 설정할 수 있을까? (4) | 2018.09.04 |
"내가 원하는대로 페이징 구현할 수 있을까?" -2 (1) | 2018.09.03 |