1. Logging: naive approach
여러 클래스에 걸쳐 있는 Concerns를 모듈화하는 방법
naive approach의 단점
비즈니스 로직과 로깅 기능 혼합
- 우려 분리 원칙을 위반.
- 복잡성 및 상호 의존성 증가.
- 느슨하게 결합된 설계 방지.
코드 반복 포함
- 변경하기 어려움
2. Spring AOP
AOP는 아래와 같은 프로그래밍 패러다임.
(지원 기능을 main 프로그램의 비즈니스 논리와 분리하다.)
AOP-Weaving
3. AOP Definition
Aspect
- 여러 클래스에 걸쳐 중단되는 엔터프라이즈 애플리케이션 문제를 구현하는 클래스
- 포인트컷과 조언의 조합
- 예: 로깅, 프로파일링, 보안, 트랜잭션
Join point
- 애플리케이션에서 AOP 측면을 연결할 수 있는 지점
Advice
- 방법 실행 전 또는 후에 수행할 실제 작업
Pointcut
- 조언을 실행해야 하는 결합점 집합
- 식 또는 패턴을 사용하여 점 자르기 지정
Advice Types
Advice |
Description |
before |
method를 실행하기 전에 a dvice 실행 |
after |
결과에 관계없이 method 실행 후 advice 실행 |
after-retuning |
method가 성공적으로 완료된 경우에만 method 실행 후 advice 실행 |
after-throwing |
execution으로 method가 종료된 경우에만 method 실행 후 advice 실행. |
around |
method 호출하기 전과 후에 권장 사항 실행 |
Pointcut expression Pattern
4. Aspects Implementation
4-1. AOP 기반의 XML 스키마
Aspect = 일반 Java 클래스 + XML 구성(config)
4-2. AOP 기반의 @AspectJ
Aspect = 일반 Java 클래스 + annotation
POM.XML(Maven Proejct)에 라이브러리 추가
XML에 새로운 NameSpace 사용
4-1. AOP 기반의 XML 스키마
①Implementing aspect
②Declaring an aspect
③Declaring a pointcut
④Declaring advices
4-2. AOP 기반의 @AspectJ
@AspectJ 사용하려면 <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 포함
① Declaring an aspect
② Declaring a pointcut
③ Declaring advices
정리.
AOP의 주요 구성 요소
- aspect, point cut, join point, advice
- AOP를 사용하면 여러 클래스에 영향을 미치는 기능을 재사용 가능한 모듈(즉, 측면)로 캡슐화할 수 있음
AOP의 장점
- 관심 분리를 촉진
- 코드 재사용 및 모듈화 촉진
- 느슨하게 결합된 설계 추진
'Programming > Spring' 카테고리의 다른 글
#Spring - 8. MySQL Workbench (0) | 2019.06.17 |
---|---|
#Spring - 6. 스프링 Annotation 기반 구성 (0) | 2019.06.12 |
#Spring - 5. Dependency Injection(DI) 종속성 주입 (0) | 2019.06.12 |
#Spring - 4.Integrating Servlets and JSP (0) | 2019.06.11 |
#Spring - 3. Java Server Pages(JSP) (0) | 2019.06.11 |
댓글