AOP의와 함께 봄 정의 주석, 간단한 구성 로그 주석 수 (rpm)

JDK1.5에 소개 된 자바 주석, 스프링 프레임 워크는 그것의 머리에 자바 주석으로 발생합니다.

 다음은 AOP (Aspect 지향적 인 프로그래밍) 개념 스프링 프레임을 포함하는 간단한 프로세스 봄 사용자 정의 주석을 설명합니다.
 자바 주석이 명확하지 않습니다, 당신은 자바 사용자 정의 주석을 이해할 수 : 자바 사용자 정의 주석

첫째, 사용자 정의 주석을 만들

 매개 변수의 requestUrl는 우리의 정의입니다

패키지 com.sam.annotation; 

가져 java.lang.annotation의를 *. ; 

@Target (ElementType.METHOD) 
@Retention (RetentionPolicy.RUNTIME) 
@Documented 
@Inherited 
공공의 @의 인터페이스 이 mylog { 

    문자열 requestUrl (); 

}

둘째, 해결의 코멘트

AOP 스프링 여기에 사용되는 (지향 프로그래밍) 특성

클래스에 의해 @Aspect 코멘트는 클래스 섹션이 될
변형 된 방법이 mylog 주석이 주석 타입에 대한 지정된 엔트리 포인트이다 @MyLog @Pointcut 지정된 엔트리 포인트에 의해, 시작점을 입력한다.
  • 조언을하기 전에 @Before : 조언은 가입 시점 이전에 실행되는하지만, (만약 예외를 던지지 않는다면)이 통지하기 전에 실행 흐름의 연결 지점을 중지 할 수 없습니다.
  • 조언 주위 @Around : 전 동작이 구현되는 방법을 수행 할 수 후, 상기 방법은 () point.proceed 내에서 수행해야하고, 그 결과를 반환한다.
  • 포스트 알림 @AfterReturning : 접속점 후에 실행 통지하면 정상 완료 : 예컨대, 예외, 통상 창을 던지고없는 방법.
  • @AfterThrowing 예외 알림 : 예외가 종료 방법을 던져 때 조언을 실행할 수 있습니다.
  • @After 포스트 통지 : 통지 할 때 실행하는 정상 완료의 접속점 : 예컨대, 예외, 통상 창을 던지고없는 방법.
패키지 com.sam.annotation; 

수입 org.aspectj.lang.JoinPoint;
수입 에 org.aspectj.lang.ProceedingJoinPoint;
가져 org.aspectj.lang.annotation을 *. ;
수입 org.aspectj.lang.reflect.MethodSignature;
수입 org.springframework.stereotype.Component; 

수입 java.lang.reflect.Method의; 

@Aspect // AOP切面
@Component
 공공  클래스 MyLogAspect { 


    // 切入点 
    @Pointcut (값 = "@annotation (com.sam.annotation.MyLog)" )
     개인  무효 포인트 컷 () { 

    } 


    / **
     * 전과 메소드 실행 후 
     * 
     * @param의 포인트 
     * @param 이 mylog 
     * @return 
     * / 
    @Around (값 = "포인트 컷 () && @annotation (이 mylog)" )
     공중 주위 개체 (ProceedingJoinPoint 가리킨이 mylog이 mylog) { 

        System.out에 .println는 ( "++++ 방법은 주위 수행 ++++" ) 

        문자열 requestUrl = myLog.requestUrl (); 

        // 절편 클래스 이름 
        클래스를 clazz = point.getTarget () getClass ();
         // 절편 상기 방법 
        에있어서, 방법 = ((MethodSignature) point.getSignature ()) getMethod 메소드 ();

        에서 System.out.println ( "실행 클래스 :"+ clazz에 + "방법 :"+ 방법 + "사용자 지정 요청 주소 :"+ requestUrl) 

        은 try {
             반환 point.proceed (); // 집행 
        } 캐치 (Throwable의 )의 Throwable { 
            Throwable.printStackTrace (); 
            반환 에 Throwable.getMessage (); 
        } 
    } 

    / ** 
     * 메소드 실행 
     * 
     * @param joinpoint를 
     * @param 이 mylog 
     * @param의 결과 
     * @return 
     * / 
    @AfterReturning를 (값"결과를"반환 = "포인트 컷 () && @annotation (이 mylog)" )
     공공 객체 afterReturning (joinpoint를 joinpoint를,이 mylog이 mylog, 개체 결과) { 

//         ) HttpServletRequest의 요청 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes (). 대해 GetRequest ();
//         HttpSession이 세션 = request.getSession (); 

        에서 System.out.println ( "++++执行了afterReturning方法++++" ); 

        에서 System.out.println ( "执行结果:"+ 결과); 

        반환 결과를;

    파라미터 : * / 
    (@AfterThrowing 값 "예"를 던지고 = = "포인트 컷 () && @annotation (이 mylog)" )
     공중  공극 afterThrowing (joinpoint를 joinpoint를,이 mylog이 mylog 예외 예) { 
        에서 System.out.println를 ( "+ +++执行了afterThrowing方法++++ " ); 
        에서 System.out.println ( "请求:"+ myLog.requestUrl () + "出现异常" ); 
    } 

}

사용자 정의 주석의 셋째, 사용

컨트롤러에 직접 주석을 사용 @MyLog

패키지 com.sam.controller; 

수입 com.sam.annotation.MyLog;
수입 org.springframework.web.bind.annotation.RequestMapping;
수입 org.springframework.web.bind.annotation.RequestMethod;
수입 org.springframework.web.bind.annotation.RestController; 

@RestController 
@RequestMapping (값 = "/ 인덱스" )
 공용  클래스 인 IndexController { 

    @MyLog (requestUrl = "/ 인덱스请求" ) 
    @RequestMapping (방법 = RequestMethod.GET)
     공용 문자열 인덱스 () {
          "인덱스" ; 
    }
}

프로젝트, 방문 HTTP를 시작합니다 : // localhost를 : 8080 / 색인

결과

++++执行了around方法++++
执行了 类:class com.yfs.controller.IndexController 方法:public java.lang.String com.yfs.controller.IndexController.index() 自定义请求地址:/index请求
++++执行了afterReturning方法++++
执行结果:index

봄, 사용자 정의 주석을 구현 이상의 사용자 정의 작업을 수행해야하는 간단한 절차를 설명한, 당신은 클래스 내부의 섹션에서 프로그래밍 할 필요가있다.

 

출처 : HTTPS : //my.oschina.net/magicalSam/blog/1359369

 

추천

출처www.cnblogs.com/myseries/p/11729260.html