일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- QueryDSL
- JDBC
- 인프런
- 백준
- Exception
- springdatajpa
- pointcut
- Android
- 스프링
- java
- 김영한
- Thymeleaf
- kotlin
- JPQL
- 자바
- AOP
- 그리디
- 스프링 핵심 원리
- db
- SpringBoot
- spring
- Greedy
- Spring Boot
- 알고리즘
- transaction
- http
- Proxy
- Servlet
- 스프링 핵심 기능
- jpa
- Today
- Total
개발자되기 프로젝트
AOP 관련 용어 , Aspect, Advice, Execution .. 본문
AOP : Aspect Oriented Programming (관점 지향 프로그램)
핵심적인 관심사항(Core Concern)과 공통 관심 사항(Cross cutting concern)으로 분리하고 각각을 모듈화 하는 것.
예를 들어 각 메서드마다 실행 전후 log를 남기고 싶다?? 모든 method다마다 일일히 추가하는건 귀찮기도하고..
숫자가 많아지면 수정 시 놓칠 가능성도 있음.
따라서 부가기능으로 AOP를 적용하여 log남길 수 있음.
1. @Aspect : 구현하고자 하는 횡단 관심사의 모듈.
한개 이상의 포인트컷과 어드바이스의 조합으로 만들어진다.
2. Advice : 실질적인 부가기능을 담은 구현체? aspect가 무엇을? 언제? 할지 정의함.
3. execution : Advice를 적용할 메서드를 명시할 때 사용합니다. = 어디다가 적용시킬 것인지!
- point cut 작성 방법 추가 필요.
- controller package의 모든 메서드를 AOP로 보겠다.
- 어디에 공통관심 기능 소스를 삽입하겠다..
@Pointcut("execution(* com.example.aop.controller..*.*(..))")
4. Target : 부가기능을 부여할 대상.
5. Point cut : 부가기능이 적용될 method를 선정하는 방법
6. JoinPoint : 들어가는 지점에 대한 정보를 가지고 있는 객체.
spring에서는 method호출
Provides reflective access to both the state available at a join point and static information about it. This information is available from the body of advice using the special form thisJoinPoint. The primary use of this reflective information is for tracing and logging applications
7. 예제
@Aspect //aop 적용을 위해서 @Aspect annotation 필요.
@Component //스프링에서 객체 관리해, bean
public class ParameterAop {
//point cut???
@Pointcut("execution(* com.example.aop.controller..*.*(..))")
private void cut(){ }
@Before("cut()")
public void before(JoinPoint joinpoint){
MethodSignature methodSignature = (MethodSignature) joinpoint.getSignature(); //mtehod가져올 수 있음
Method method= methodSignature.getMethod();
System.out.println(method.getName());
Object[] args = joinpoint.getArgs(); //arguments = 매개변수
for(Object obj : args){
System.out.println("type : " + obj.getClass().getSimpleName());
System.out.println("value : " + obj);
}
}
@AfterReturning(value = "cut()", returning = "returnObj")
public void afterReturn(JoinPoint joinpoint, Object returnObj){
System.out.println("return obj");
System.out.println(returnObj);
}
}
'Spring Boot' 카테고리의 다른 글
Rest Template (0) | 2021.07.01 |
---|---|
Bean & Ioc & Application Context (0) | 2021.06.16 |
Swagger 설정 (0) | 2021.05.30 |
Swagger (0) | 2021.05.30 |
Mock MVC (0) | 2021.05.22 |