Spring AOP 의 간단 한 응용
목차
Spring 프레임 워 크 는 IOC 제어 반전 (Inversion of Control, IoC) 과 AOP 의 절단면 프로 그래 밍 (Aspect Oriented Program, AOP) 두 가지 중요 한 특성 이 있다 는 것 을 잘 알 고 있다.오늘 은 주로 AOP 에 대해 알 아 보 러 왔 습 니 다.
소스 코드 를 수정 하지 않 은 상태 에서 한 개 또는 한 조 의 조작 에 추가 기능 을 추가 하 는 것 이 주요 역할 이다.로그 기록, 사무 처리, 권한 제어 등 기능 은 AOP 로 '우아 하 게' 실현 할 수 있 으 며 이러한 추가 기능 과 진정한 업무 논 리 를 분리 시 켜 소프트웨어 의 구조 가 더욱 뚜렷 해 질 것 이다.
쉽게 말 하면 실행 할 때 코드 를 클래스 의 지정 방법, 지 정 된 위치 에 동적 으로 자 르 는 프로 그래 밍 사상 은 바로 절단면 을 대상 으로 하 는 프로 그래 밍 이다.
관련 용어
Aspect (절단면)
aspect
는 pointcut
과 advice
로 구성 되 는데 이것 은 가로로 자 르 는 정 의 를 포함 하고 링크 점 의 정의 도 포함한다.Spring AOP 가 절단면 을 담당 하 며 절단면 이 정의 하 는 횡단면 논 리 를 절단면 이 지정 한 링크 점 에 짜 냅 니 다.쉽게 말 하면 클래스 에 @ Aspect 주해 가 있 는 클래스 가 절단면 입 니 다.
Join point (링크 점 / 기록 점)
프로그램 실행 중의 한 점, 예 를 들 어 실행 방법 이나 이상 처리.
Spring AOP 에서 하나의 join point 는 항상 하나의 운행 방법, 즉 방법 만 이 연결 점 이다.
advice (증강 / 알림)
join point (즉, point cut 규칙 을 만족 시 키 는 join point) 에서 특정한 시간 에 실 행 된 동작 입 니 다. Advice 는 몇 가지 유형 이 있 습 니 다. 다음은 토론 할 것 입 니 다.
포인트 컷 (접점)
join point 와 일치 하 는 술어 (a predicate that matches join points).
advice 는 pointcut 표현 식 과 연결 되 어 있 으 며, pointcut 와 일치 하 는 임의의 joinpoint 에서 실 행 됩 니 다 (예 를 들 어 특정한 이름 을 가 진 방법 을 실행 합 니 다).
쉽게 말 하면 pointcut 은 joinpoint 의 필터 로 pointcut 의 규칙 을 만족 시 키 는 joinpoint 만 advice 를 실행 할 수 있 습 니 다.
Introduction
하나의 유형 에 추가 적 인 방법 이나 필드 를 추가 합 니 다. Spring AOP 는 대상 에 게 새로운 인 터 페 이 스 를 도입 할 수 있 습 니 다. 예 를 들 어 introduction 을 사용 하여 bean 에 IsModified 인 터 페 이 스 를 실현 하고 이 를 통 해 caching 의 실현 을 간소화 할 수 있 습 니 다.
Target object
하나 이상 의 advice 대상 을 짜 냅 니 다. 대상 도 advised object 라 고 합 니 다.
Spring AOP 는 실행 할 때 프 록 시 방식 으로 aspect 를 실현 하기 때문에 adviced object 는 항상 하나의 프 록 시 대상 (proxied object) 을 말 합 니 다. adviced object 는 원래 의 클래스 가 아니 라 advice 를 짜 서 생 긴 프 록 시 클래스 를 말 합 니 다.
AOP proxy
AOP 에 advice 를 짜 면 결과 클래스 가 생 깁 니 다. 이것 은 원류 와 논 리 를 강화 하 는 프 록 시 클래스 입 니 다. Spring AOP 에서 AOP 프 록 시 는 JDK 동적 프 록 시 대상 이나 CGLIB 프 록 시 대상 이 될 것 입 니 다.
Weaving (짜 임)
aspect 를 다른 대상 과 연결 하고 adviced object 를 만 드 는 과정 입 니 다. 구현 기술 에 따라 AOP 를 짜 는 방법 은 세 가지 가 있 습 니 다.
advice 의 유형
Pointcut 은 pointcutexpression 을 통 해 설명 하 는데 몇 가지 한정 어가 있 습 니 다.구체 적 으로 는 Spring 문서 7.2.3 Declaring a pointcut 또는 aspectj - cheat - sheet 을 참고 할 수 있 습 니 다.
Spring AOP 사용
우 리 는 세 가지 방식 으로 Spring AOP 를 사용 할 수 있 습 니 다. 그들 은 각각 @ Aspect - based (Annotation), Schema - based (XML), 그리고 저층 의 Spring AOP API 입 니 다.우리 가 후속 으로 설명 하 는 것 은 주로 주해 의 실현 에 기초 한 것 이다.
xml 를 사용 하 는 실현 원 리 는 주 해 를 사용 하 는 것 과 대체적으로 일치 합 니 다. 기본적으로 주 해 를 포함 하 는 설정 정 보 를 xml 설정 파일 로 옮 겼 을 뿐 입 니 다.
AOP API 는 Spring 1.2 가 제공 하 는 역사적 용법 으로 현재 의 Sping 4 도 지원 되 고 주해 와 xml 도 그 에 기반 한 사용 입 니 다.SpringAOP 의 기본 입 니 다. 관심 있 는 것 은 링크 4 를 참고 하여 볼 수 있 습 니 다.
주석 기반 사용
@ AspectJ 지원 추가
@ AspectJ 는 자바 주 해 를 사용 하여 AOP 의 인 코딩 스타일 을 실현 합 니 다. @ AspectJ 스타일 의 AOP 는 AspectJ Project 가 AspectJ 5 에서 도입 한 것 이 며 Spring 도 @ AspectJ 의 AOP 스타일 을 지원 합 니 다.
의존 도 를 높이다
org.springframework
spring-aop
${spring.version}
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjweaver
${aspectj.version}
@ Aspect 주석 열기
spring-mvc.xml @Aspect
//jdk
//cglib
xml aop namespace
jdk 프 록 시 와 CGlib 프 록 시 JDK 동적 프 록 시 는 인터페이스 가 실 현 된 클래스 에 만 프 록 시 를 생 성 할 수 있 을 뿐 클래스 에 대해 서 는 생 성 할 수 없습니다.CGLIB 는 클래스 에 대한 에이 전 트 를 실현 하 는 것 으로 지정 한 클래스 에 하위 클래스 를 생 성하 여 덮어 쓰 는 방법 입 니 다.상속 이기 때문에 이런 종류 나 방법 은 final 로 성명 하지 않 는 것 이 좋 고 final 은 상속 과 다 태 를 막 을 수 있다.
aspect 정의 (절단면)
주석 @ Aspect 로 Bean 을 표시 하면 Spring 프레임 워 크 는 이 Bean 을 자동 으로 수집 하여 Spring AOP 에 추가 합 니 다. 예 를 들 어:
@Aspect
@Component
public class TestAspect {
}
@ Aspect 는 Spring 에 의 해 자동 으로 식별 되 고 Bean 으로 등록 할 수 없습니다.이 를 위해 서 는 @ Component 주석 을 따로 추가 해 야 합 니 다.
성명 포인트 컷
pointcut 성명 은 두 부분 으로 구성 되 어 있 습 니 다.
Pointcut 서명 (signature) 은 방법 명 과 관련 된 매개 변 수 를 포함 합 니 다.
Pointcut 표현 식 (expression) 은 우리 가 관심 이 있 는 방법 을 지정 하 는 데 사 용 됩 니 다 (즉, advice 를 짤 수 있 습 니 다).
pointcut expression
이 방법 은 반환 값 이 없어 야 합 니 다. 이 방법 자체 가 pointcutsignature 입 니 다. pointcut 표현 식 은 @ Pointcut 주 해 를 사용 하여 지정 합 니 다. 위의 그림 은 pointcut 를 정의 합 니 다. 프로젝트 경로 aspects. trace. demo 에 맞 는 모든 방법 을 실행 하 는 것 을 설명 합 니 다.
접점 표지 부 (designator)
구체 적 으로 사용 하려 면 사례 코드 를 참고 하 세 요.
성명 조언
advice 는 하나의 pointcut 표현 식 과 연결 되 어 있 으 며, 일치 하 는 join point 방법 으로 실 행 될 전 / 후 / 주변 에서 실 행 됩 니 다. pointcut 표현 식 은 간단 한 pointcut 이름 의 참조 또는 완전한 pointcut 표현 식 일 수 있 습 니 다.
* Before
Before Advice @Before
advice joinpoint
* After returning
After returning Advice。
@AfterReturning
* After throwing
, 。
@AfterThorwing 。
* After (finally)
。
@After
try{
try{
//@Before
method.invoke(..);
}finally{
//@After
}
//@AfterReturning
}catch(){
//@AfterThrowing
}
* Around
, , , .
@Around
코드 주소
https://github.com/Kcyfrank/SpringMVC-example
참조 링크:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.