spring op 의 간단 한 사용 방법 에 대한 상세 한 설명

4031 단어 springaop쓰다
AOP:[동적 에이전트]
프로그램 이 실행 되 는 동안 특정한 코드 를 지정 한 방법 이 지정 한 위치 에 동적 으로 삽입 하여 실행 하 는 프로 그래 밍 방식 을 말한다.
1.op 모듈 가 져 오기;Spring AOP:(spring-aspects)
2.업무 논리 류(MathCalculator)를 정의 합 니 다.비 즈 니스 논리 가 실 행 될 때 로 그 를 인쇄 합 니 다(방법 전,방법 실행 종료,방법 이상,xxx)
3.로그 절단면 류(LogAspects)를 정의 합 니 다.절단면 류 의 방법 은 MathCalculator.div 가 어디 까지 실행 되 는 지 동적 으로 감지 한 다음 에 실행 해 야 합 니 다.
알림 방법:
  • 사전 알림(@Before):logStart:대상 방법(div)이 실행 되 기 전에 실행 합 니 다
  • 후 설치 알림(@After):logEnd:목표 방법(div)실행 이 끝 난 후에 실행(방법 이 정상적으로 끝 났 든 이상 이 끝 났 든)
  • 반환 알림(@AfterReturning):logReturn:대상 방법(div)이 정상적으로 돌아 온 후에 실행 합 니 다
  • 이상 알림(@AfterThrowing):logException:대상 방법(div)에 이상 이 발생 한 후 실행 합 니 다서 라운드 알림(@Around):동적 에이전트,수 동 추진 목표 방법 실행(joinPoint.procced())4.절단면 류 의 목표 방법 에 언제 어디서 실행 되 는 지 표시 합 니 다(주석 알림).
    5.절단면 류 와 업무 논리 류(목표 방법 소재 류)를 모두 용기 에 넣는다.
    6.Spring 에 게 어떤 종류 가 절단면 류 인지 알려 야 합 니 다.(절단면 류 에 주 해 를 추가 해 야 합 니 다.@Aspect)
    [7]、설정 클래스 에@EnableaspectJAutoProxy 를 추가 합 니 다[주석 기반 op 모드 열기]
    Spring 에 많은@EnableXXX;
    3 단계:
    1)업무 논리 구성 요소 와 절단면 류 를 용기 에 넣는다.Spring 에 게 어느 것 이 절단면 류 인지 알려 주세요(@Aspect)
    2),절단면 류 의 모든 알림 방법 에 알림 주 해 를 표시 하여 Spring 이 언제 어디서 실행 되 는 지 알려 줍 니 다(접점 표현 식)
    3),주석 기반 op 모드 열기;@EnableAspectJAutoProxy
    
    package com.opk.bean;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.*;
    
    import java.util.Arrays;
    
    /* 
     * @Aspect:   Spring         
     * wmy 13:03 2019/9/5
     * @Param 
     * @return 
     **/
    @Aspect
    public class LogAspects {
    
      //           
      //1、    
      //2、       
      @Pointcut("execution(public * com.opk.bean.*.*(..))")
      public void pointCut(){};
    
      //@Before         ;      (         )
      @Before("pointCut()")
      public void logStart(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs();
        System.out.println(joinPoint.getSignature().getName()+":  。。。@Before,     :"+ Arrays.asList(args));
      }
      @After("com.opk.bean.LogAspects.pointCut()")
      public void logEnd(JoinPoint joinPoint){
        System.out.println(""+joinPoint.getSignature().getName()+"  。。。@After");
      }
    
      //JoinPoint            
      @AfterReturning(value ="pointCut()",returning = "result")
      public void logReturn(JoinPoint joinPoint,Object result){
        System.out.println(""+joinPoint.getSignature().getName()+"    。。。@AfterReturning:    :{"+result+"}");
      }
    
      @AfterThrowing(value ="pointCut()",throwing = "ex")
      public void logException(JoinPoint joinPoint,Exception ex){
        System.out.println(""+joinPoint.getSignature().getName()+"  。。。    :{"+ex+"}");
      }
    }
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class MathCalculator {
      public int dev(int i,int j)
      {
        System.out.println("MathCalculator......");
        return i/j;
      }
    }
    
    @EnableAspectJAutoProxy
    @Configuration
    public class AOPConfig {
    
      //          
      @Bean("calculator")
      public MathCalculator calculator(){
        return new MathCalculator();
      }
    
      //         
      @Bean
      public LogAspects logAspects(){
        return new LogAspects();
      }
    }
    
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(AOPConfig.class);
        ctx.refresh();
        MathCalculator bean = (MathCalculator)ctx.getBean("calculator");
        bean.dev(10,3);
    
      }
    실행 결과:

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기