이 기사는 SpringBoot 프로젝트에서 AOP를 사용하는 방법을 소개합니다. 나는 그것을 당신과 공유 할 것입니다. 세부 사항은 다음과 같습니다.
1. 개요
일반 논리를 사용하여 AOP 기술을 구현하면 서명 검증, 인증 등과 같은 프로그램 작성을 크게 단순화 할 수 있습니다. Spring의 선언적 거래도 AOP 기술을 통해 구현됩니다.
특정 코드는 예제 프로젝트 https://github.com/qihaiyan/springcamp/tree/master/spring-aop를 참조하십시오.
Spring의 AOP 기술에는 네 가지 핵심 개념이 있습니다.
Pointcut : Point Cut, 예를 들어 실행 (*Cn.SpringCamp.SpringAop.Service.*.*(..))와 같은 계기 할 방법을 정의하는 데 사용됩니다.
조언 : 메소드를 가로 채운 후 실행할 조치
측면 : 슬라이스, Pointcut 및 조언을 결합하여 컷 표면을 형성합니다.
가입 포인트 : 실행 중 PointCut 인스턴스
Weaver : SpectJ 또는 Spring AOP와 같은 AOP 구현 프레임 워크
2. 정의 점 정의
일반적으로 사용되는 Pointcut 정의에는 실행 및 @annotation이 포함됩니다. 실행은 메소드가없는 것을 정의하며 비교적 일반적인 섹션을 구현하는 데 사용됩니다. @annotation은 Spring의 트랜잭션 주석과 같은 특정 방법에 주석으로 추가 할 수 있습니다.
실행 지점 절단 정의는 포인트 컷 정의를 중앙에서 관리하기 위해 공개 클래스에 배치해야합니다.
예:
공개 클래스 CommonJoinPointConfig {@PointCut ( "execution (*cn.springcamp.springaop.service.*.*(..))") public void servicelayerexecution () {}}이러한 방식으로 특정 측면 클래스에서 CommonJoinPointConfig.servicelayerexecution ()을 통해 탄젠트 지점을 참조 할 수 있습니다.
public class BeforeAspect { @Before("CommonJoinPointConfig.serviceLayerExecution()") public void before(JoinPoint joinPoint) { System.out.println(" ---------------> Before Aspect "); System.out.println ( "---------------->" + joinpoint 실행 전); }}탄젠트 지점을 변경 해야하는 경우 각 Aspect 클래스를 수정하지 않고 CommonJoinPointConfig 클래스 만 수정하면됩니다.
3. 일반적으로 사용되는 얼굴 절단
전 : 방법이 실행되기 전에 조언을 실행하며, 종종 서명 검증, 인증 등에 사용됩니다.
후 : 실행이 완료된 후 실행이 완료된 후 실행이 성공했는지 또는 예외가 발생하든 실행됩니다.
회복 후 : 메소드 실행이 성공한 후에 만 실행합니다.
후조 : 메소드 실행이 예외를 던진 후에 만 실행합니다.
간단한 측면 :
@Aspect@Componentpublic class BeforeAspect { @Before("CommonJoinPointConfig.serviceLayerExecution()") public void before(JoinPoint joinPoint) { System.out.println(" ---------------> Before Aspect "); System.out.println ( "--------------->" + joinpoint 실행 전); }}4. 사용자 정의 주석
특정 방법의 실행 시간을 수집한다고 가정하십시오.보다 합리적인 방법은 주석을 사용자 정의한 다음 실행 시간을 수집하는 데 필요한 메소드 에이 주석을 추가하는 것입니다.
먼저 주석 트랙 타임을 정의하십시오.
@TARGET ({ElementType.Method, ElementType.Type}) @retention (retentionPolicy.runtime) public @interface tracktime {String param () 기본값 ";}그런 다음 주석의 동작을 구현하기 위해 측면 클래스를 정의합니다.
@Aspect@ComponentPublic Class TrackTimeAspect {@Around ( "@annotation (tracktime)") 공개 객체 주변 (진행자 조인 포인트 joinpoint, 트랙 타임 트랙 타임) 던지기 가능 {object result = null; Long StartTime = System.CurrentTimeMillis (); 결과 = joinpoint.proceed (); long timetaken = system.currenttimemillis () - 시작 시간; system.out.println ( "-------------> Param [" + joinpoint + "에 의해 취한 시간 [" + tracktime.param () + "는" + timetaken); 반환 결과; }}메소드 에서이 주석을 사용하면이 메소드의 실행 시간을 수집 할 수 있습니다.
@TrackTime (param = "myService") public String Runfoo () {System.out.println ( "---------------> foo"); 반환 "foo";}@tracktime (param = "myservice") 주석을 전달할 수 있습니다.
주석이 매개 변수를 전달하려면 주석을 정의 할 때 매개 변수 문자열 param () 기본값 "기본값"을 지정해야합니다.
동시에, 측면 클래스에서 해당 매개 변수가 주변 방법에 추가됩니다. 매개 변수의 변수 이름은 @around 주석에서 트랙 타임이어야하지만 클래스 이름 트랙 타임은 아닙니다.
@Around ( "@annotation (tracktime)") 공개 객체 주변 (진행자 조인 포인트 joinpoint, 트랙 타임 트랙 타임)
5. 요약
샘플 프로젝트를 실행할 때 콘솔은 다음을 출력합니다.
---------------> 측면 이전
-------------> 실행 사업 전 (String Cn.SpringCamp.SpringAop.Service.Myservice.runfoo ())
--------------> Foo
-------------> 실행 (String Cn.SpringCamp.SpringAop.Service.myservice.runfoo ())에 의해 취한 시간)).
--------------> 측면
-------------> 실행 후 (String Cn.SpringCamp.SpringAop.Service.Myservice.runfoo ())
--------------> 후에 측면
----------------> 실행 (string cn.springcamp.springaop.service.myservice.runfoo ()) value foo와 함께 반환합니다
여러 측면의 실행 순서는 후회 후 (후방) 이후에 임박한다는 것을 알 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.