zoukankan      html  css  js  c++  java
  • AOP

    注意:使用AOP需要额外的导入3个包。

    1.使用spring,需要设置schema--->需要有如下的schema

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemeLocation="http://www.springframework.org.schema/aop

                                  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"

    2.打开基于Annotation的AOP

      <aop:aspectj-autoproxy/>

    3.创建一个AOP的关注点(创建一个类,名为LogAspect),这就是我们的切面,切面是做什么的,就是把我们关注的问题拿出来,做一个模块

      里面的方法logStart()、logEnd()、logAround()都是advice(或者叫通知)。通知有三种注解,@Before、@After、@Around

      @Before:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行之前调用执行logStart()方法。

      我们为logStart()方法加入了一个参数JoinPoint jp,该参数是被自动传入的。我们可以通过该参数获得,是哪个类在执行,哪个方法在执行。

      @After:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行之后调用执行logEnd()方法。

      @Around:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行过程中调用执行logAround()方法。

      我们为logAround()方法传入了一个参数ProceedingJoinPoint pjp,该参数也是被自动传入的。我们可以通过这个参数,来控制实际方法的执行。

      

    //LogAspect类叫做切面
    @Component("logAspect")//让这个切面类被Spring所管理
    @Aspect//声明这个类是一个切面类
    public class LogAspect{
        //logStart叫做通知
        /**
         *第一个*表示任意返回值(后面有一个空格)
         *第二个*表示org.zttc.itat.spring.dao包中的所有类
         *第三个*表示以add开头的所有方法
         *(..)表示任意参数
        @Before("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.update*(..))")
        public void logStart(JoinPoint jp){
            //得到执行的对象
            System.out.println(jp.getTarget());
            //得到执行的对象
            System.out.println(jp.getSignature().getName());
            Logger.info("加入日志");
        }  
    
        @After("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.update*(..))")
        public void logEnd(JoinPoint jp){
            Logger.info("方法调用结束加入日志");
        }  
    
        @Around("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                      "execution(* org.zttc.itat.spring.dao.*.update*(..))")
        public void logAround(ProceedingJoinPoint pjp){
            Logger.info("开始在around中加入日志");
            //让程序执行
            pjp.proceed();
            Logger.info("结束around");
        }  
    }
  • 相关阅读:
    react跳转url,跳转外链,新页面打开页面
    如何把大段文字转为带html标签的文字
    react给一个div行内加背景图片并实现cover覆盖模式居中显示
    react获取当前页面的url参数
    mongodb查询数据库中某个字段中的值包含某个字符串的方法
    react实现多行文本超出加省略号
    小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑
    小程序渲染html的两种方法
    小程序url传参如何写变量
    小程序在父组件执行子组件方法,可适用于下拉刷新上拉加载之后执行子组件方法
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/5565275.html
Copyright © 2011-2022 走看看