spring-AOP 및 AOP 가 request 의 각종 매개 변 수 를 가 져 옵 니 다.

spring-AOP 및 AOP 에서 request 의 각종 매개 변 수 를 가 져 옵 니 다.
AOP 는 절단면 프로 그래 밍 이 라 고 하 는데 프로그램 개발 에서 로그,사무,권한 대기 등 시스템 차원 의 문 제 를 해결 하 는 데 주로 사용 된다.
AOP 의 기본 개념
  • Aspect(절단면):보통 하나의 유형 으로 그 안에 착안점 과 알림 을 정의 할 수 있 습 니 다
  • JointPoint(연결 점):프로그램 실행 과정 에서 명확 한 점,일반적으로 방법의 호출
  • Advice(알림):AOP 가 특정한 접점 에서 실행 하 는 증강 처리,before,after,after Returning,after Throwing,around
  • Pointcut(착안점):알림 이 있 는 연결 점 입 니 다.프로그램 에서 주로 쓰기 착안점 표현 식
  • 으로 나타 납 니 다.
  • AOP대리:AOP 프레임 워 크 가 만 든 대상 이 고 대 리 는 목표 대상 의 강화 이다.Spring 의 AOP 대 리 는 JDK 동적 대 리 를 할 수 있 고 CGLIB 대리 일 수도 있 습 니 다.전 자 는 인 터 페 이 스 를 바탕 으로 하고 후 자 는 하위 클래스
  • 를 바탕 으로 합 니 다.
    2.Spring AOP
    Spring 의 AOP 프 록 시 는 Spring 의 IOC 용기 와 떨 어 질 수 없습니다.프 록 시 생 성,관리 및 의존 관 계 는 모두 IOC 용기 가 책임 집 니 다.Spring 은 기본적으로 JDK 동적 프 록 시 를 사용 합 니 다.프 록 시 인터페이스 가 아 닌 프 록 시 클래스 가 필요 할 때 Spring 은 자동 으로 CGLIB 프 록 시 로 전환 합 니 다.그러나 현재 프로젝트 는 모두 인터페이스 프로 그래 밍 입 니 다.그 러 니까 JDK 동적 에이 전 트 는 상대 적 으로 많이 쓰 는 거 야.
    3.주석 기반 AOP 설정 방식
    1.@AsjectJ 지원 사용 하기
    spring 설정 에서 다음 문장 을 설정 합 니 다:
    
    <aop:aspectj-autoproxy />
    또는 주석 사용:
    
    @EnableAspectJAutoProxy
    2.알림 유형 소개
    (1)Before:대상 방법 이 호출 되 기 전에 강화 처 리 를 합 니 다.@Before 는 삽입점 표현 식 만 지정 하면 됩 니 다.
    (2)AfterReturning:목표 방법 이 정상적으로 완 성 된 후에 강화 합 니 다.@AfterReturning 은 접점 표현 식 을 지정 한 것 외 에 반환 값 형 참 명 returning 을 지정 하여 목표 방법 을 나타 내 는 반환 값 을 지정 할 수 있 습 니 다.
    (3)AfterThrowing:프로그램 에서 처리 되 지 않 은 이상 을 처리 하 는 데 사 용 됩 니 다.@AfterThrowing 은 절 입 점 표현 식 을 지정 한 후 throwing 의 반환 값 인삼 이름 을 지정 할 수 있 습 니 다.이 인삼 이름 을 통 해
    대상 방법 에서 던 진 이상 대상 에 접근 합 니 다.
    (4)After:목표 방법 이 완 성 된 후에 강화 하고 목표 방법 에 관 계 없 이 성공 적 으로 완성 합 니 다.@After 는 절 입 점 표현 식 을 지정 할 수 있 습 니 다.
    (5)Around:서 라운드 알림 은 목표 방법 이 완 료 된 후에 강화 처 리 를 합 니 다.서 라운드 알림 은 가장 중요 한 알림 유형 입 니 다.예 를 들 어 사무,로그 등 은 모두 서 라운드 알림 입 니 다.프로 그래 밍 의 핵심 은 Proceeding JoinPoint 입 니 다.
    3.실행 우선 순위 알림
    목표 방법 에 들 어 갈 때 Around 를 짜 고 Before 를 짜 고 목표 방법 에서 물 러 날 때 Around 를 짜 고 After Returning 을 짜 서 나중에 After 를 짜 냅 니 다.
    메모:Spring AOP 의 서 라운드 알림 은 AfterThrowing 알림 의 실행 에 영향 을 줄 수 있 습 니 다.동시에 사용 하지 마 십시오!동시에 사용 해도 의미 가 없다.
    4.절 입 점 의 정의 와 표현 식
    접점 식 의 정 의 는 전체 AOP 의 핵심 이 고 자신의 규범 이 있 습 니 다.
    Spring AOP 가 지원 하 는 접점 인디케이터:execution:실행 방법 과 일치 하 는 연결 점
    
    A:@Pointcut(“execution(* com.aijava.springcode.service….(…))”)
    첫 번 째 는 임 의 방법 에 맞 게 값 을 되 돌려 주 는 것 을 나타 낸다.
    방법의 임 의 매개 변수 개수
    
    B:@Pointcut(“within(com.aijava.springcode.service.*)”)
    within 일치 하 는 방법의 연결 점 을 제한 합 니 다.위 에 있 는 것 은 service 패키지 의 임 의 연결 점 과 일치 합 니 다.
    
    C:@Pointcut(“this(com.aijava.springcode.service.UserService)”)
    this 는 AOP 프 록 시 를 지정 한 형식의 인 스 턴 스 로 한정 합 니 다.예 를 들 어 특정한 인 스 턴 스 를 지정 한 것 이 바로 UserService 입 니 다.
    
    D:@Pointcut(“bean(userService)”)
    bean 도 매우 자주 사용 합 니 다.bean 은 IOC 용기 의 bean 이름 을 지정 할 수 있 습 니 다.
    다음은 AOP 를 사용 하여 통계 계산 방법의 실행 시간 과 request 요청 파라미터 등 정 보 를 얻 는 log 방법 입 니 다.
    
    /**
     * description:
     *         
     *
     * @author wkGui
     */
    @Component
    @Aspect
    public class ResExeTimeCounter {
        private static Logger logger = LoggerFactory.getLogger(ResExeTimeCounter.class);
        @Pointcut("execution(* com.wk.controller..*.*(..))")
        public void pointCut() {
        }
        @Around("pointCut()")
        public Object around(ProceedingJoinPoint pjp) throws Throwable {
            RequestAttributes ra = RequestContextHolder.getRequestAttributes();
            ServletRequestAttributes sra = (ServletRequestAttributes) ra;
            assert sra != null;
            HttpServletRequest request = sra.getRequest();
            String url = request.getRequestURL().toString();
            String method = request.getMethod();
            String queryString = request.getQueryString();
            long startTime = System.currentTimeMillis();
            logger.info("{url:{}, method:{}, queryString:{}}", url, method, queryString);
            Object rs;
            boolean successAble = false;
            JsonObject paramsJson = new JsonObject();
            try {
                Object[] params = pjp.getArgs();
                for (int i = 0; i < params.length; i++) {
                    if (params[i] instanceof BindingResult
                            || params[i] instanceof HttpRequest
                            || params[i] instanceof HttpResponse){
                        continue;
                    }
                    paramsJson.addProperty("param-" + i, JsonUtil.toJsonWtihNullField(params[i]));
                }
                rs = pjp.proceed();
                successAble = true;
            } finally {
                logger.info("{url:{}, method:{}, success-able:{}, exe-time:{}, params:{}}", url, method, successAble, System.currentTimeMillis() - startTime, paramsJson);
            }
            return rs;
        }
    }
    
    SpringAOP 는 request 의 모든 인 자 를 가 져 와 사용자 작업 로 그 를 기록 합 니 다.
    오늘 AOP 관리 일 지 를 만 들 었 는데 알 이 너무 아파 서...
    낡은 규칙 에 코드 를 붙 여 라.

    우선 op 가방 외 에 이 세 개의 가방 이 필요 합 니 다.
    스스로 어머니 를 섬기다.

    controllers 에 들 어 가 려 면 이 코드 를 뮤 직 비디오 설정 에 기록 하 십시오.오전 내 내 자 르 지 못 하 는 것 이 바로 이 때 문 입 니 다.

    method 클래스 에 들 어 가 는 방법 이름

    이것 을 본 떠 서 나 올 수 있 습 니 다.PS:주석 을 무시 하 세 요.강박 증 을 죽 일 수 있 습 니 다.

    제 제어 클래스 에는 두 개의 인자 request 와 response 만 있 기 때문에 제 가 있 는 request 는 아래 표 시 된 0 과 같 습 니 다.
    하부의
    
      Enumeration parameter = request.getParameterNames();
      while(parameter.hasMoreElements()) {
      String a=(String) parameter.nextElement();
      System.out.println(request.getParameter(a));
      }
    
    페이지 에서 올 라 온 모든 매개 변수 와 매개 변수 이름,매개 변수:request.getParameter(a),매개 변수 이름:a 를 가 져 올 수 있 습 니 다.
    위의 코드 는 op 에서 실측 할 수 있 지만 차단기 에 넣 으 면 실측 은 날짜 로 돌아 갑 니 다.무슨 귀신 인지 모 르 겠 습 니 다.get 요청 은 가끔 정상 입 니 다.post 정상 이 아 닙 니 다.op 에 문제 가 없습니다.
    이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

    좋은 웹페이지 즐겨찾기