Presentation is loading. Please wait.

Presentation is loading. Please wait.

AOP 개념 및 Spring의 AOP 기능.

Similar presentations


Presentation on theme: "AOP 개념 및 Spring의 AOP 기능."— Presentation transcript:

1 AOP 개념 및 Spring의 AOP 기능

2 Spring Framework – AOP 절차적 프로그래밍 OOP AOP

3 Spring Framework – AOP 다음 문제의 정답은? 1 11 12 1121 122111 112213 ???????

4 Spring Framework – AOP 사고의 전환

5 Spring Framework - AOP 요구사항!!
MessageRenderer, MessageProvider의 모든 메써드 시작과 종료시 “MethodName 시작”, “MethodName 종료”라는 Logging 메시지를 출력한다.

6 Spring Framework - AOP

7 Spring Framework - AOP 요구사항 변경!!
MessageRenderer, MessageProvider의 모든 메써드 시작과 종료시 “MethodName Start”, “MethodName End”라는 Logging 메시지를 출력한다.

8 Spring Framework - AOP 요구사항 변경!! 메써드로 전달되는 인자를 Logging 메시지로 출력한다.
MessageRenderer, MessageProvider의 모든 메써드 시작과 종료시 “MethodName Start”, “MethodName End”라는 Logging 메시지를 출력한다. 메써드로 전달되는 인자를 Logging 메시지로 출력한다.

9 Spring Framework - AOP 삽질의 연속

10 Spring Framework - AOP

11 Spring Framework - AOP 요구사항!!
비즈니스 계층과 퍼시스턴스 계층의 모든 메써드 시작과 종료시 “메써드 시작”, “메써드 종료”라는 Logging 메시지를 출력한다. 또한 메써드에 인자를 출력한다. Runtime Exception이 발생할 경우 시스템 관리자에게 에러 메시지에 대한 메일을 발송한다.

12 Spring Framework – AOP

13 지금까지의 구현 방법 - UserServiceImpl
public User findUser(String userId) throws UserNotFoundException { if (logger.isDebugEnabled()) { logger.debug("findUser() 시작"); logger.debug("User ID : " + userId); User user = userDAO.findUser(userId); if (user == null) { throw new UserNotFoundException(context.getMessage( "user.notfound.exception", new Object[] { userId }, null)); logger.debug(userId + " 사용자 정보 : " + user); logger.debug("findUser() 종료"); return user;

14 Spring Framework – AOP AOP를 이용한 해결 방법

15 AOP 적용 - UserServiceImpl
public User findUser(String userId) throws UserNotFoundException { User user = userDAO.findUser(userId); if (user == null) { throw new UserNotFoundException(context.getMessage( "user.notfound.exception", new Object[] { userId }, null)); if (logger.isDebugEnabled()) { logger.debug(userId + " 사용자 정보 : " + user); return user;

16 AOP 적용 – LoggingAdvice public class UserLoggingAdvice implements MethodInterceptor { protected final Log logger = LogFactory.getLog(getClass()); public Object invoke(MethodInvocation invocation) throws Throwable { String className = invocation.getThis().getClass().getName(); if (logger.isDebugEnabled()) { logger.debug(className + "." + invocation.getMethod().getName() + "()" + " 시작!!"); Object[] args = invocation.getArguments(); if ((args != null) && (args.length > 0)) { for (int i = 0; i < args.length; i++) { logger.debug("Argument[" + i + "] : " + args[i]); } //Target 클래스의 메써드를 실행한다. Object retVal = invocation.proceed(); + " 종료!!"); return retVal;

17 Spring Framework – AOP

18 Logging Poincut public boolean matches(Method method, Class cls) {
 public class LoggingPointcut extends StaticMethodMatcherPointcut { public boolean matches(Method method, Class cls) { if( "findUser".equals(method.getName()) ) { return true; } return false; public ClassFilter getClassFilter() { return new ClassFilter() { public boolean matches(Class cls) { return (cls == UserServiceImpl.class) || (cls == MySQLUserDAO.class); };

19 Spring Framework – AOP

20 Spring Framework - AOP

21 Spring Framework - AOP

22 Spring Framework – AOP 샘플 애플리케이션 개발 및 분석 (Spring 프레임워크 워크북 3장)

23 Join point Spring Framework – AOP 프로그램이 실행되는 중 식별할 수 있는 Point.
예를 들어 메써드의 실행, Exception Handling 등이 포함된다.

24 Advice Spring Framework – AOP Join Point에서 Aspect에 의하여 실행되는 Action을 의미
예를 들어 Logging Aspect일 경우 Join Point에서 Logging 하는 것을 의미한다.

25 Advice 의 종류 Spring Framework – AOP
Before advice : Join Point 전에 실행되는 Advice. Around advice : Join Point 전, 후에 실행되는 Advice. After returning advice : Joint Point 완료된 후에 실행되는 Advice After throwing advice : Exception Throwing이 될 때 실행되는 Advice After (finally) advice : After returning advice, After throwing advice 모든 경우에 실행

26 Before Advice Spring Framework – AOP
@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()") public void doAccessCheck() { // ... }

27 After Returning Advice
Spring Framework – AOP After Returning Advice @AfterReturning( pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()", returning="retVal") public void doAccessCheck(Object retVal) { // ... }

28 After Throwing Advice Spring Framework – AOP @AfterThrowing(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()", throwing="ex") public void doRecoveryActions(DataAccessException ex) { // ... }

29 After (finally) Advice
Spring Framework – AOP After (finally) Advice @After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()") public void doReleaseLock() { // ... }

30 Around Advice Spring Framework – AOP
@Around("com.xyz.myapp.SystemArchitecture.businessService()") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { // start stopwatch Object retVal = pjp.proceed(); // stop stopwatch return retVal; }

31 Pointcut Spring Framework – AOP
Join Point들을 선택하는 규칙을 정의하는 것. Weaving Rule을 정의하는 것

32 Pointcut의 종류 – Spring 1.x Spring Framework – AOP
StaticMethodMatcherPointcut DynamicMethodMatcherPointcut Perl5RegexpMethodPointcut JdkRegexpMethodPointcut NameMatchMethodPointcut ComposablePointcut ControlFlowPointcut

33 Pointcut의 종류 – Spring 2.0 Spring Framework – AOP execution within this
target args

34 Pointcut의 종류 – Spring 2.0 Spring Framework – AOP @target @args @within
@annotation &&, ||, !

35 Pointcut의 예제 – Spring 2.0 Spring Framework – AOP
execution(* com.xyz.service.AccountService.*(..)) within(com.xyz.service.*) this(com.xyz.service.AccountService) @target(org.springframework.transaction.annotation.Transactional) @within(org.springframework.transaction.annotation.Transactional) @args(com.xyz.security.Classified)

36 Aspect Spring Framework – AOP 하나의 Crosscutting Concern을 Aspect로 정의 가능
Advice와 Pointcut이 결합되어 Aspect가 된다. 예를 들어 Transaction, Security등이 하나의 Aspect가 된다.

37 Target Object Spring Framework – AOP
Aspect에 의하여 Advice가 적용되는 Object

38 Weaving Spring Framework – AOP
Advcie, Pointcut, Target Object로 분리된 것을 하나로 결합하는 것을 의미 Weaving 작업을 지원하는 Tool(AspectJ, Spring AOP)을 Weaver라 지칭

39 Spring Framework - AOP AOP를 적용하기 전의 소스 구조

40 Spring Framework - AOP AOP를 적용 후

41 Spring Framework - AOP

42 Spring Framework - AOP 요구사항!!
Runtime Exception이 발생할 경우 시스템 관리자에게 에러 메시지에 대한 메일을 발송한다.

43 Spring Framework - AOP 요구사항!!
UserServiceImpl의 updateUser()는 “admin”, removeUser는 “admin” 권한을 가진 사용자만 접근이 가능하도록 해라.

44 Spring Framework - AOP

45 AOP 적용 단계

46 AOP를 DDD에 적용

47 AOP를 DDD에 적용

48 AOP를 DDD에 적용

49 AOP를 DDD에 적용

50 AOP를 DDD에 적용

51 AOP를 DDD에 적용

52 AOP를 DDD에 적용

53 과제 요구사항!! DAO 클래스의 메써드 실행속도가 500ms이 넘을 경우 Warning 메시지를 출력한다.


Download ppt "AOP 개념 및 Spring의 AOP 기능."

Similar presentations


Ads by Google