일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- high level client
- docker
- Mac
- 차트
- springboot
- flask
- sort
- Elasticsearch
- matplotlib
- API
- zip 파일 암호화
- MySQL
- Test
- query
- plugin
- analyzer test
- aggregation
- Python
- TensorFlow
- License
- licence delete curl
- aggs
- ELASTIC
- Java
- zip 암호화
- token filter test
- 파이썬
- 900gle
- license delete
- Kafka
Archives
- Today
- Total
개발잡부
[AOP] Aspect Oriented Programming 본문
반응형
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍
Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지임
AOP 주요 개념
- Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.
- Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )
- Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
- JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
- PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음
스프링 AOP 특징
- 프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임
- 스프링 빈에만 AOP를 적용 가능
- 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적
의존성 부여
더보기
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: '3.1.2'
@Aspect 어노테이션을 붙여 이 클래스가 Aspect를 나타내는 클래스라는 것을 명시하고 @Component를 붙여 스프링 빈으로 등록한다.
Aspect 실행 시점을 지정할 수 있는 어노테이션
- @Before (이전) : 어드바이스 타겟 메소드가 호출되기 전에 어드바이스 기능을 수행
- @After (이후) : 타겟 메소드의 결과에 관계없이(즉 성공, 예외 관계없이) 타겟 메소드가 완료 되면 어드바이스 기능을 수행
- @AfterReturning (정상적 반환 이후)타겟 메소드가 성공적으로 결과값을 반환 후에 어드바이스 기능을 수행
- @AfterThrowing (예외 발생 이후) : 타겟 메소드가 수행 중 예외를 던지게 되면 어드바이스 기능을 수행
- @Around (메소드 실행 전후) : 어드바이스가 타겟 메소드를 감싸서 타겟 메소드 호출전과 후에 어드바이스 기능을 수행
execution(* com.saelobi..*.EventService.*(..))가 의미하는 바는 com아래의 패키지 경로의 EventService 객체의 모든 메서드에 이 Aspect를 적용하겠다는 의미다.
@AfterReturning(pointcut = "@annotation(com.doo.aqqle.annotation.IndexerLog)", returning = "response")
어노테이션이 붙은 포인트에 해당 Aspect를 실행할 수 있는 기능
반응형
'JAVA > java' 카테고리의 다른 글
[java] Vavr 란? (1) | 2024.09.02 |
---|---|
[java] CompletableFuture에서 get()과 join() (0) | 2023.08.19 |
[java] JAVA Stream 요소삭제 (remove) (0) | 2023.06.08 |
[java ]StringTokenizer (0) | 2023.05.10 |
[java] 쓰레드 세이프(Thread Safe) (0) | 2023.05.04 |
Comments