2、AOP

作者: lois想当大佬 | 来源:发表于2019-12-10 13:56 被阅读0次

    1、什么是AOP
    把遍布应用各处的功能分离出来形成可重用的组件。Eg: 事务、日志、安全。

    2、aop术语
    切面(aspect):切点与通知的结合。
    切点(pointcut):定义了切面何处执行。
    连接点(joinpoint):能够插入切面的一个点,为应用添加新行为。一个切点包含多个连接点。
    通知(advice):定义了切面是什么以及何时使用。5种类型的通知:before、after、after-returning、after-throwing、around。
    织入(weaving):spring aop是运行期织入。把通知绑定到目标对象连接点上的过程称为织入。

    3、AOP的2种实现方式
    xml: <aop:config></aop:config>
    注解:

    @Aspect
    @Component
    public class Audience {
    
       @Pointcut("execution(* service.Performance.perform(int)) && args(num)")
       public void performance(int num) {};
    
       @Before("performance()")
       public void takeSeats() {
           System.out.println("take seats");
       }
    
       @After("performance()")
       public void applause() {
           System.out.println("ha ha ha ha");
       }
    
       @AfterThrowing("performance()")
       public void demandRefund() {
           System.out.println("demand refund");
       }
    
       @Around("performance()")
       public void watchPerform(ProceedingJoinPoint jp) {
           try {
               System.out.println("silence cell phones");
               System.out.println("take seats");
               jp.proceed();
               System.out.println("ha ha ha ha");
           } catch (Throwable e) {
               System.out.println("demand refund");
           }
       }
    
       private int count = 0;
       @Before("performance(num)")
       public void silenceCellPhones(int num) {
           System.out.println("silence cell phones");
           System.out.println("num = " + num + " count = " + (++count));
       }
    }
    

    相关文章

      网友评论

          本文标题:2、AOP

          本文链接:https://www.haomeiwen.com/subject/avqggctx.html