7.4 Spring AOP 개념 및 예시
AOP 하면 우 리 는 소프트웨어 의 세로 와 가로 문 제 를 제기 해 야 한다.세로 구 조 를 보면 바로 우리 소프트웨어 시스템 의 각 모듈 로 우리 의 핵심 업무 (예 를 들 어 상품 주문, 카 트 조회) 를 처리 하 는 것 을 책임 진다.가로 구 조 를 보면 우 리 는 거의 모든 시스템 에 공공 모듈 (예 를 들 어 권한, 로그 모듈 등) 을 포함한다.이러한 공공 모듈 은 우리 각 핵심 업무 에 분포 되 어 있다 (예 를 들 어 상품 명 세 를 주문 하고 조회 하 는 과정 은 모두 사용자 권한 을 검사 하고 시스템 로 그 를 기록 해 야 한다).이렇게 되면 개발 과정 에서 공공 모듈 의 처리 에 곳곳에서 관심 을 가 져 야 할 뿐만 아니 라 개발 후 유지 하 는 것 도 매우 번거롭다.AOP 가 생 긴 후에 응용 프로그램의 상업 논 리 를 지원 하 는 유 니 버 설 서비스 와 분리 시 켜 개발 자 들 이 핵심 업무 개발 에 더 많은 관심 을 가 질 수 있 도록 한다.
AOP 의 주요 응용 장면
AOP 는 시스템 개발 에서 매우 광범 위 하 게 응용 되 고 흔히 볼 수 있 는 장면 은 다음 과 같다.
1. 가로로 자 르 는 관심 사 는 어떤 방법 을 차단 하고 차단 한 후에 어떻게 처리 하 는 지 를 가로로 자 르 는 관심 사 라 고 한다.
2. 절단면 (aspect) 류 는 물체 특징 에 대한 추상 이 고 절단면 은 바로 횡단면 에 대한 추상 이다.
3. 연결 점 (joinpoint) 이 차단 되 는 점. Spring 은 방법 유형의 연결 점 만 지원 하기 때문에 Spring 에서 연결 점 은 차단 되 는 방법 을 말 합 니 다. 실제 연결 점 은 필드 나 구조 기 일 수도 있 습 니 다.
4. 접점 (pointcut) 에서 연결 점 을 차단 하 는 정의
5. 알림 (advice) 이란 연결 점 을 차단 한 후에 실행 할 코드 를 말 합 니 다. 알림 은 전치, 후 치, 이상, 최종, 서 라운드 알림 등 다섯 가지 로 나 눌 수 있 습 니 다.
6. 대상 에이전트 의 대상
7. 짜 기 (weave) 는 절단면 을 대상 에 적용 하고 대리 대상 을 만 드 는 과정
8. 도입 (introduction) 은 코드 를 수정 하지 않 는 전제 에서 런 타임 에 동적 으로 방법 이나 필드 를 추가 할 수 있 습 니 다.
Spring 의 AOP 지원
스프링 중 AOP 에이 전 트 는 스프링 의 IOC 용기 가 생 성 · 관 리 를 맡 고 그 의존 관계 도 IOC 용기 가 관리한다.따라서 AOP 에이 전 트 는 용기 에 있 는 다른 bean 인 스 턴 스 를 직접 사용 할 수 있 으 며, 이러한 관 계 는 IOC 용기 의 의존 주입 에 의 해 제 공 될 수 있다.Spring 프 록 시 생 성 규칙 은:
1. 기본적으로 자바 동적 프 록 시 를 사용 하여 AOP 프 록 시 를 만 듭 니 다. 그러면 모든 인터페이스 인 스 턴 스 에 프 록 시 를 만 들 수 있 습 니 다.
2. 프 록 시 클래스 가 프 록 시 인터페이스 가 아 닐 때 Spring 은 CGLIB 프 록 시 로 전환 되 고 CGLIB 를 강제로 사용 할 수 있 습 니 다.
AOP 프로 그래 밍 은 사실 매우 간단 한 일이 다. AOP 프로 그래 밍 을 보면 프로그래머 는 세 부분 만 참여 해 야 한다.
Spring 기반 AOP 단순 구현
여 기 는 주석 방식 으로 AOP 를 실현 하여 현재 의 사용 에 더욱 가깝다.
pom. xml 의존 도 추가
UTF-8
4.3.3.RELEASE
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.aspectj
aspectjweaver
1.8.9
코어, beans, context, op 을 포함 하여 spring 의 jar 가방 을 참조 해 야 합 니 다. aspectjweaver 이것 도 참조 해 야 합 니 다.
들 어 갈 업무 클래스 를 정의 합 니 다. 새로 추 가 된 방법 을 간단하게 정의 하면 됩 니 다.
@Service
public class UserService {
public void add() {
System.out.println(" ");
}
}
applicationContext.xml
이 중에서 가장 핵심 적 인 두 마디 는...
AOP 를 사용 하고 입력 클래스 를 정의 합 니 다
com.critc.aop.LogAspect
정의 절단면 프로그램 LogAspect. java@Aspect
public class LogAspect {
/**
*
*/
@Before("execution(* com.critc.service..*.*(..)) ")
private void beforeMethod() {
System.out.println("the Method begins........");
}
/**
*
*/
@After("execution(* com.critc.service..*.*(..)) ")
private void afterMethod() {
// TODO Auto-generated method stub
System.out.println("The Method after ................");
}
/**
*
* @param joinPoint
* @param result
*/
@AfterReturning(value = "execution(* com.critc.service..*.*(..)) ", returning = "result")
public void AfterReturning(JoinPoint joinPoint, Object result) {
System.out.println("The Method after ................" + result);
}
/**
*
* @param joinPoint
* @param e
*/
@AfterThrowing(value = "execution(* com.critc.service..*.*(..)) ", throwing = "e")
public void AfterThrowing(JoinPoint joinPoint, Exception e) {
System.out.println("The Method afterThrowing................"
+ e.getMessage().toString());
}
/**
*
* @param pjp
* @return
*/
@Around(value = "execution(* com.critc.service..*.*(..)) ")
public Object aroundTest(ProceedingJoinPoint pjp) {
String methodName = pjp.getSignature().getName();
Object object = null;
try {
//
System.out.println("The Method " + methodName + "before................");
// object = pjp.proceed();
object = "view/index";
//
System.out.println(object);
} catch (Throwable e) {
// TODO Auto-generated catch block
//
System.out.println(e.getMessage().toString());
}
System.out.println("The Method " + methodName + "after................");
return object;
}
}
위의 이 예 는 op 의 대략적인 예 를 들 어 다음 에 나 는 Spring AOP 가 실제 에서 의 응용, 예 를 들 어 이상 처리, 로그 처리, 권한 제어 등 을 상세 하 게 설명 할 것 이다.
원본 코드 다운로드
본 공정 상세 소스 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.