AOP 개념 및 Spring의 AOP 기능.

Slides:



Advertisements
Similar presentations
Transaction ㅇ Transaction 을 직접 구현하려면, 까다로운 설계와 복잡한 코드를 필요로 하고 수정에 공수가 많이 들게 된다. ㅇ 스프링에서 제공하는 Transaction Manager 를 사용하여 쉽고 간편하게 어려운 트랜잭션을 해결할 수 있다. xml.
Advertisements

멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
한국 스프링 사용자 모임 ( 1 스프링 AOP 선택, 활용, 이슈 백기선.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
EXEM ( ) LTW를 활용한 데이터 수집기 김경식.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
2장 닷넷 프레임워크.
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
TDD Junit TDD & Spring Framework 참고자료
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
[ 단원 08 ] 예외처리와 스레드.
명품 JAVA Programming.
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
[INA470] Java Programming Youn-Hee Han
8장 자바 입출력.
IOC, DI 2015 Web Service Computing.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
Power Java 제15장 예외 처리 (Exception Handling).
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 Java Programming.
Spring Framework & MyBatis
최용술 장 Thread 최용술
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
10강. AOP(Aspect Oriented Programming)-II
주소록 프로그램.
웹 애플리케이션 로깅 및 오류 처리 기법 웹 애플리케이션 로깅의 필요성을 이해한다 로깅의 분류 및 구현 방안을 학습한다
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
AOP (Aspect Oriented Programing)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
3. Spring 프레임워크의 IoC 컨테이너 개념
Chap10 다중 스레드 Section 1 : 스레드 개요 Section 2 : Thread 클래스와 스레드 생명주기
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
객체지향의 한계를 넘어, AOP 전은영,이재훈 고덕윤.
SpringFramework 중간고사 요약 REST by SpringFramework.
Chap. 14 성능향상시키기 PS Lab. 이지연.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
JA A V W. 04.
Spring DI 이해 및 활용.
CACM 구현 public class CACM { public CACM(File file)
자바 5.0 프로그래밍.
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Spring Security 2015 Web Service Computing.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Spring 프레임워크의 이해 – day3 자바지기.
C# 10장. 참조형.
6장 클래스(상속).
간식의 세계!!.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
1. 객체-지향 프로그래밍.
Presentation transcript:

AOP 개념 및 Spring의 AOP 기능

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

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

Spring Framework – AOP 사고의 전환

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

Spring Framework - AOP

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

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

Spring Framework - AOP 삽질의 연속

Spring Framework - AOP

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

Spring Framework – AOP

지금까지의 구현 방법 - 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;

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

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;

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;

Spring Framework – AOP

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); };

Spring Framework – AOP

Spring Framework - AOP

Spring Framework - AOP

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

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

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

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 모든 경우에 실행

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

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

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

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

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; }

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

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

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

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

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)

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

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

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

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

Spring Framework - AOP AOP를 적용 후

Spring Framework - AOP

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

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

Spring Framework - AOP

AOP 적용 단계

AOP를 DDD에 적용

AOP를 DDD에 적용

AOP를 DDD에 적용

AOP를 DDD에 적용

AOP를 DDD에 적용

AOP를 DDD에 적용

AOP를 DDD에 적용

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