• 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");
        }  
    }
  • 相关阅读:
    为SharePoint 2010中的FBA创建自定义登录页面
    SharePoint 2010设置问卷调查权限
    无法创建您的个人网站,因为未启用“自助式网站创建”
    等级歧视的死循环[转]
    职业生涯中的10个致命错误
    项目经理须具备所有9 大知识领域
    项目管理工具和技术
    在SharePoint Server 2010中创建“我的网站”
    MATCH_PARENT是什么类型的布局
    Android 在代码中获取手机屏幕的宽高
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/5565275.html
Copyright © 2020-2023  润新知