zoukankan      html  css  js  c++  java
  • spring学习 十一 AspectJ-based的通知入门 不带参数的通知

    AspectJ-Based方式的AOP,通知类不需要实现任何接口,且前置通知,后置通知,环绕通知,异常通知都可以写在一个类中,下面先实现一个简单的,不带参数的通知。

    第一步定义通知类,通知类中的通知(方法)名称可以任意取

    package com.airplan.pojo;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    
    public class AspectJAdvice {
        /*
         * 前置通知
         */
        public void before() {
            System.out.println("前置通知执行");
        }
        
        /*
         * 后置通知,after通知,无论切点是否发生异常都会执行
         */
        public Object after() {
            System.out.println("after 通知执行了");
            return null;
        }
        
        /*
         * 后置通知,after-returning,只有切点正常结束时才会执行
         */
        public Object afterReturn() {
            System.out.println("afterReturn 通知执行了");
            return null;
        }
        
        /**
         * 环绕通知需要有一个返回值,以及一个参数
         * @param p
         * @return
         * @throws Throwable
         */
        public Object arround(ProceedingJoinPoint p) throws Throwable{
            System.out.println("执行环绕");
            System.out.println("环绕-前置");
            Object result = p.proceed();
            System.out.println("环绕后置");
            return result;
        }
        
        /*
         * 异常通知
         */
        public void mythrow(){
            System.out.println("异常");
        }
    }

    第二步配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop.xsd">
        
        <!-- 第一步:注册通知类 ,与切点类-->
        
        <bean id="advices" class="com.airplan.pojo.AspectJAdvice"></bean>
        <bean id="pointCutClass" class="com.airplan.pojo.PointCutClass"></bean>
        <!-- 第二步:配置切面 -->
        <aop:config>
            <!-- 配置切面,绑定通知类 -->
            <aop:aspect ref="advices">
                <!-- 配置切点 -->
                <aop:pointcut expression="execution(* com.airplan.pojo.PointCutClass.*(..))" id="pointCutFun"/>
                <!-- 配置通知与切点关联 -->
                <aop:after method="after" pointcut-ref="pointCutFun"/>
                <aop:before method="before" pointcut-ref="pointCutFun"/>
                <aop:after-returning method="afterReturn" pointcut-ref="pointCutFun"/>
                <aop:around method="arround" pointcut-ref="pointCutFun"/>
                <aop:after-throwing method="mythrow" pointcut-ref="pointCutFun"/>
            </aop:aspect>
        </aop:config>
        
    </beans>

    第三步:测试代码

    package com.airplan.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.airplan.pojo.PointCutClass;
    
    public class AopDemo {
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
            PointCutClass pc = ac.getBean("pointCutClass",PointCutClass.class);
            pc.pointCutFun();
        }
    }
  • 相关阅读:
    xdvipdfmx:fatal: Unable to open "xxx.pdf". Output file removed. fwrite: Broken pipe xelatex.exe
    安装Visual Studio 时窗口闪过就退出
    一些概念的收集
    如何让字符串中奇怪的空格现出原形
    mysql替换特殊字符
    asscii码对应表
    Linux下的tar压缩解压缩命令详解
    centos 6.8 /etc/sysconfig/下没有iptables的问题
    mysqldumpslow简单用法
    linux查询占用空间较大的文件
  • 原文地址:https://www.cnblogs.com/cplinux/p/9741687.html
Copyright © 2011-2022 走看看