AOP 관련
- 작성자 :
- 박*철
- 작성일 :
- 2015-02-02 13:31:39
- 조회수 :
- 570
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요.
전자정부 관련 질문이 있습니다.
service, dao 를 aop 를 이용해서 공통 기능을 구현하려고 합니다.
service는 aop:before, aop:after 를 사용하고
dao는 aop:around 를 사용했을 경우는
정상적으로 service before 로그 => dao around 전 로그 => dao around 후 로그 => service after 로그가 찍힘니다.
하지만 이상하게도
service는 aop:around 를 사용하고
dao는 aop:around 를 사용했을 경우는
dao arround 전 로그 => service arround 전 로그 => service arround 후 로그 => dao arround 후 로그
처럼 마치 ... dao가 service를 감싸는 듯한 형태의 로그 순서대로 실행 됩니다.
이유가 무엇일까요...
기능 구현은 잘 되지만... 실행 되는 순서가 이상하게 되는 듯 해서 질문 드립니다.
항상 친절한 답변 감사합니다.
전자정부 관련 질문이 있습니다.
service, dao 를 aop 를 이용해서 공통 기능을 구현하려고 합니다.
service는 aop:before, aop:after 를 사용하고
dao는 aop:around 를 사용했을 경우는
정상적으로 service before 로그 => dao around 전 로그 => dao around 후 로그 => service after 로그가 찍힘니다.
하지만 이상하게도
service는 aop:around 를 사용하고
dao는 aop:around 를 사용했을 경우는
dao arround 전 로그 => service arround 전 로그 => service arround 후 로그 => dao arround 후 로그
처럼 마치 ... dao가 service를 감싸는 듯한 형태의 로그 순서대로 실행 됩니다.
이유가 무엇일까요...
기능 구현은 잘 되지만... 실행 되는 순서가 이상하게 되는 듯 해서 질문 드립니다.
항상 친절한 답변 감사합니다.
A
안녕하세요. 표준프레임워크센터입니다.
aop의 advice순서는 완전히 보장하지 못합니다.
예를 들어서 before, around, after advice를 모두 설정했을때
반드시 before->around->실행->around->after로 되는 것이 아니며
around ->before ->실행->after->around의 순서로 반드시 보장이 되는것도 아닙니다.
다만 before과 around의 일부는 pointcut앞에서 실행되고 after와 around일부는 pointcut뒤에 실행되는 것만 보장될 뿐입니다.
만약 원하시는 순서대로 하시려면 service나 dao모두 before와 after advice만을 이용해서 설정하시는 것이 맞을 듯 합니다.
service, dao에 before, after 설정을 하게 되면
service before -> dao before -> dao after -> service after의 순서대로 될 것입니다.
감사합니다.
aop의 advice순서는 완전히 보장하지 못합니다.
예를 들어서 before, around, after advice를 모두 설정했을때
반드시 before->around->실행->around->after로 되는 것이 아니며
around ->before ->실행->after->around의 순서로 반드시 보장이 되는것도 아닙니다.
다만 before과 around의 일부는 pointcut앞에서 실행되고 after와 around일부는 pointcut뒤에 실행되는 것만 보장될 뿐입니다.
만약 원하시는 순서대로 하시려면 service나 dao모두 before와 after advice만을 이용해서 설정하시는 것이 맞을 듯 합니다.
service, dao에 before, after 설정을 하게 되면
service before -> dao before -> dao after -> service after의 순서대로 될 것입니다.
감사합니다.