Spring AOP 기본 개념

4916 단어 SpringAOP
밤 을 들 어 대리 님 께 말씀 드 리 겠 습 니 다.
나 는 모두 가 스타 를 안다 고 믿는다.
대부분의 스타 들 은 매니저 가 있다.
만약 우리 가 큰 공장 이 라면,지금 스타 대리 제품 을 찾 고 싶다 면,우 리 는 바로 스타 를 찾 을 수 있 습 니까?아니요.현실 에서 당신 은 대부분 스타 를 찾 는 대리인(매니저)을 찾 습 니 다.매니저 는 당신 과 의 상담 을 통 해 제품 을 알 아 보고 자신의 스타 가 이 광 고 를 받 을 수 있 는 지 확인 합 니 다.가능 하 다 고 생각 되면 계약 체결,상담 활동 날짜,리허설 등 을 상의 하 겠 습 니 다.사업 가 들 은 자신 이 스타 를 찾 지 못 했다 는 것 을 알 지만 그 는 이 일이 이미 이 루어 졌 다 는 것 을 안다.
1.이 과정 에서 업 체 는 스타 의 매니저 를 찾 았 다.하지만 최초의 임 무 를 완수 했다.
2.스타 매니저 가 스타 를 도와 계약 을 체결 하고 행사 날 짜 를 정 하 는 등.
3.스타 는 광고 촬영 에 전념 합 니 다.
이 럴 때 스타 매니저 가 스타 의 기능 을 강화 했다 고 할 수 있 지 않 을까요?
AOP 가 뭐야?
OOP 와 비교 하면 AOP 는 횡단 문 제 를 처리한다.이러한 횡 절 성 문 제 는 주 논리의 실현 에 영향 을 주지 않 지만 코드 의 각 부분 에 흩 어 져 유지 하기 어렵다.AOP 는 이러한 문제 와 주 업무 논 리 를 분리 하여 주 업무 논리 와 결합 하 는 목적 을 달성 하 는 것 이다.

AOP 는 절단면 을 향 한 프로 그래 밍 사상 이다.이런 횡단면 적 인 문 제 는 이들 을 절단면 으로 추상 화하 고 절단면 에 관심 을 가 지 는 프로 그래 밍 이다.이것 이 바로 AOP 이다.
AOP 의 관심 사 는 횡 절 성 문제 입 니 다.

기본 용어
(1)절단면(Aspect)
여러 가지 관심 사 를 뛰 어 넘 는 모듈 화.사무 관 리 는 자바 응용 프로그램 에서 관심 사 를 가로 지 르 는 좋 은 예 이다.Spring AOP 에 서 는 일반적인 클래스(패턴 기반 방법)를 사용 하거나@Aspect주해 의 일반적인 클래스(@AspectJ 스타일)를 사용 하여 이 루어 집 니 다.
절단면 은 가로로 관심 사 를 자 르 는 모듈 화 입 니 다.하나의 절단면 은 같은 유형의 서로 다른 강화 방법 을 포함 할 수 있 습 니 다.예 를 들 어 사무 처리 와 로그 처 리 는 두 개의 절단면 으로 이해 할 수 있 습 니 다.절단면 은 절 입 점 과 알림 으로 구성 되 어 있 으 며,횡 절 논리 적 정의 도 포함 되 어 있 으 며,절 입 점 의 정의 도 포함 되 어 있다.Spring AOP 는 절단면 을 실행 하 는 프레임 워 크 로 절단면 이 정의 하 는 횡단면 논 리 를 절단면 이 지정 한 연결 점 에 짜 는 것 입 니 다.
간단하게@Aspect 주 해 를 사용 하 는 클래스 가 절단면 이 라 고 볼 수 있 습 니 다.
(2)대상(대상)
목표 대상 은 주 업무 논 리 를 포함 하 는 증강 대상 을 말한다.하나 이상 의 절단면 에 의 해 알려 진 대상 이 라 든 가.
(3)연결 점(JoinPoint)
프로그램 실행 과정 에서 명확 한 점,예 를 들 어 방법의 호출 이나 특정한 이상 이 던 져 졌 다.연결 점 은 두 가지 정보 로 확 정 됩 니 다.
방법
4.567917.상대 점(방 위 를 나타 내 는 것,즉 목표 방법의 어떤 위치,예 를 들 어 호출 전,후 등)쉽게 말 하면 연결 점 은 차단 되 어 있 는 프로그램 실행 점 입 니 다.Spring 은 방법 형식의 연결 점 만 지원 하기 때문에 Spring 에서 연결 점 이 차단 되 는 방법 입 니 다.
사람 말 은 spring 에서 알림 을 사용 할 수 있 는 곳 입 니 다.
(4)착안점(PointCut)
위 에서 말 한 연결 점 을 바탕 으로 접점 을 정의 합 니 다.당신 의 한 종류 에 15 가지 방법 이 있 습 니 다.그러면 몇 십 개의 연결 점 이 있 습 니 다.맞 죠?하지만 모든 방법 근처에 알림 을 사용 하고 싶 지 않 습 니 다(뜨개질 이 라 고 합 니 다.나중에 다시 말 합 니 다).그 중 몇 가지 방법 을 사용 하기 전에 이상 을 던 질 때 무엇 을 하 라 고 하 시 겠 습 니까?그러면 접점 으로 이 몇 가지 방법 을 정의 하고 접점 으로 연결 점 을 선택 하 며 원 하 는 방법 을 선택 하 십시오.

@Pointcut("execution(* com.remcarpediem.test.aop.service..*(..))")
public void pointcut() {
}
상단 절 입 점 의 일치 규칙 은com.remcarpediem.test.aop.service가방 에 있 는 모든 종류의 모든 함수 입 니 다.
(5)알림(조언)
Spring AOP 는 다음 과 같은 유형의 알림 을 포함 합 니 다.
  • 이전 알림(Before advice):연결 점 전에 실 행 된 알림 이지 만 실행 흐름 이 연결 점 까지 계속 되 는 것 을 막 을 능력 이 없습니다(이상 을 던 지지 않 는 한)
  • 돌아 온 후 알림(After returning advice):연결 점 이 정상적으로 완 료 된 후에 실행 되 는 알림(예 를 들 어 방법 이 돌아 와 서 이상 을 던 지지 않 으 면)
  • 이상 알림 을 던 진 후(After throwing advice):방법 이 이상 을 던 져 서 종료 하면 알림 을 실행 합 니 다
  • After(finally)알림(After(finally)advice):연결 점 이 종료 되 는 방식(정상 또는 이상 반환)에 관 계 없 이 실 행 될 알림 입 니 다
  • 서 라운드 알림(Around advice):연결 점 을 둘 러 싼 알림,예 를 들 어 방법 호출.이것 은 가장 유력 한 건의 다.서 라운드 알림 은 방법 호출 전후 에 사용자 정의 행 위 를 수행 할 수 있 습 니 다.연결 점 을 계속 할 지,자신의 반환 값 을 되 돌려 주거 나 이상 을 던 져 서 건 의 를 줄 이 는 방법 을 선택 하 는 것 도 책임 진다
  • 
    // @Before          ,log            ,JoinPoint    ,
    @Before("pointcut()")
    public void log(JoinPoint joinPoint) { 
    }
    (6)짜 기(Weaving)
    직 입 은 절단면 과 업무 논리 대상 을 연결 하고 알림 대 리 를 만 드 는 과정 입 니 다.컴 파일 할 때 클래스 를 불 러 올 때 와 실행 할 때 만 들 수 있 습 니 다.컴 파일 할 때 짜 는 것 은 정적 에이전트 이 고 실행 할 때 짜 는 것 은 동적 에이전트 입 니 다.
    관건 은 접점 이 어떤 연결 점 을 정 의 했 는 지 알려 주 는 것 이다.
    정적 에이전트 모드
    정적 에이전트 란 AOP 프레임 워 크 가 컴 파일 단계 에서 AOP 프 록 시 클래스 를 생 성하 기 때문에 컴 파일 시 강화 라 고도 부른다.ApsectJ 는 정적 에이전트 의 실현 중 하나 이자 가장 유행 하 는 것 이다.정적 프 록 시 는 컴 파일 할 때 프 록 시 클래스 를 생 성 하기 때문에 동적 프 록 시 보다 효율 이 높 습 니 다.AspectJ 는 단독으로 사용 할 수도 있 고 스프링 과 결합 해서 사용 할 수도 있다.
    동적 에이전트 모드
    정적 프 록 시 와 달리 동적 프 록 시 는 AOP 프레임 워 크 가 컴 파일 할 때 생 성 된 바이트 코드 를 수정 하지 않 고 실행 할 때 메모리 에 AOP 프 록 시 대상 을 생 성 한 다 는 것 이다.이 AOP 대상 은 대상 의 모든 방법 을 포함 하고 특정한 접점 에서 강화 처 리 를 하고 원래 대상 을 되 돌 리 는 방법 을 포함한다.
    Spring AOP 의 동적 대 리 는 주로 두 가지 방식 이 있 습 니 다.JDK 동적 대리 와 CGLIB 동적 대리 입 니 다.
    JDK 에이 전 트 는 대 리 된 클래스 를 반사 적 으로 처리 하고 피 에이전트 클래스 에 인 터 페 이 스 를 구현 해 야 합 니 다.핵심 클래스 는 Invocation Handler 인터페이스 와 Proxy 클래스 입 니 다.
    대상 클래스 가 인 터 페 이 스 를 실현 하지 못 하면 Spring AOP 프레임 워 크 는 CGLIB 를 사용 하여 대상 클래스 를 동적 으로 대리 합 니 다. 
    CGLIB(Code Generation Library)는 코드 가 생 성 된 라 이브 러 리 로 실행 할 때 특정한 종류의 하위 클래스 를 동적 으로 생 성 할 수 있다.CGLIB 는 계승 을 통 해 동적 에이 전 트 를 하기 때문에 어떤 클래스 가 final 로 표시 되면 CGLIB 를 동적 에이 전 트 를 사용 할 수 없습니다.핵심 클래스 는 MethodInterceptor 인터페이스 와 Enhancer 클래스 입 니 다.
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기