zoukankan      html  css  js  c++  java
  • XML方式实现Spring的AOP

    1、编写切面类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package com.fz.annotation.aop;
     
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
     
    public class LogInterceptor {
         
        public void before(){
            System.out.println("方法之前执行....");
        }
        public void afterRutting(){
            System.out.println("方法正常执行之后....");
        }
        public void afterThrowing(){
            System.out.println("方法抛出异常之后....");
        }
        public void around(ProceedingJoinPoint pjp) throws Throwable{
            System.out.println("方法执之前around......");
            pjp.proceed();//向下继续方法的执行:(包括执行其他切面的拦截,如果当中抛出异常,则不会向下继续执行)
            System.out.println("方法执之后around......");//这里会在@AfterReturning执行之后执行
        }
    }

    2、编写applicationContext.xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8"?>
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        <context:annotation-config />
        <context:component-scan base-package="com.fz.annotation" />
        <bean id="logInterceptor" class="com.fz.annotation.aop.LogInterceptor">
        </bean>
        <aop:config>
            <aop:pointcut
                expression="execution(public void com.fz.annotation.service.impl.UserServiceImpl.userAdd(com.fz.xml.entity.User))"
                id="servicePointcut" />
            <aop:aspect id="logAspect" ref="logInterceptor">
                <aop:before method="before" pointcut-ref="servicePointcut" />
            </aop:aspect>
        </aop:config>
         
    </beans>

    其中:<aop:pointcut>标签和<aop:aspect>同级,表示<aop:pointcut>是一个全局的pointcut

    也可以让pointcut只供某一个逻辑使用,像下面这样写

    1
    2
    3
    4
    5
    6
    7
    <aop:config>
        <aop:aspect id="logAspect" ref="logInterceptor">
             <aop:pointcut id="servicePointcut"
            expression="execution(public void com.fz.annotation.service.impl.UserServiceImpl.userAdd(com.fz.xml.entity.User))"/>        
            <aop:before method="before" pointcut-ref="servicePointcut" />
        </aop:aspect>
    </aop:config>

    还有可以这样写,注意:直接在before里写pointcut属性的时候需要将pointcut-ref属性去掉

    1
    2
    3
    4
    5
    <aop:config>
        <aop:aspect id="logAspect" ref="logInterceptor">
            <aop:before method="before" pointcut="execution(public void com.fz.annotation.service.impl.UserServiceImpl.userAdd(com.fz.xml.entity.User))"/>
        </aop:aspect>
    </aop:config>






  • 相关阅读:
    高斯消元模板(通用+异或)
    矩阵快速幂模板
    hdu 6185 递推+矩阵快速幂
    欧几里得小结
    乘法逆元模板
    vijo 1456最小总代价
    MariaDB数据库
    docker基本命令
    std::tuple
    boost::asio
  • 原文地址:https://www.cnblogs.com/meet/p/4762356.html
Copyright © 2011-2022 走看看