小庆的Spring学习笔记三

                                                                                                                      SpringAop

一.基于xml的Aop配置

目标类

package com.yqg.aop2;

import java.lang.reflect.UndeclaredThrowableException;

/**
 * @author yqg
 * @date 2019-02-18 19:36
 */
public class MaJiang {
   
    public void hule(){
        System.out.println("自摸,爽");
    }
}

切面类

package com.yqg.aop2;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * @author yqg
 * @date 2019-02-18 19:37
 */
public class Aspect {

    public void before(){
        System.out.println("我听牌了");
    }

    public void after(){
        System.out.println("快给钱");
    }

    public void exception(){
        System.out.println("我诈糊了");
    }

    public void around(ProceedingJoinPoint joinPoint){
        System.out.println("我听牌了啊");
        try {
            joinPoint.proceed();
        } catch (Throwable throwable) {
            System.out.println("我诈糊了啊");
            throwable.printStackTrace();
        }
        System.out.println("快给钱啊");
    }
}

  xml配置

<!--目标对象-->
    <bean id="maJiang" class="com.yqg.aop2.MaJiang"></bean>
    <!--切面对象-->
    <bean id="aspect" class="com.yqg.aop2.Aspect"></bean>

 <aop:config>
<aop:aspect ref="aspect">
<aop:pointcut id="pointcut" expression="execution(* *.hule(..))"></aop:pointcut>
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<aop:after method="after" pointcut-ref="pointcut"></aop:after>
<aop:after-throwing method="exception" pointcut-ref="pointcut"></aop:after-throwing>
<aop:around method="around" pointcut-ref="pointcut"></aop:around>
</aop:aspect>
</aop:config>

  二.基于注解的Aop配置

package com.yqg.aopannotation;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

/**
 * @author yqg
 * @date 2019-02-18 19:37
 */
@Component
@org.aspectj.lang.annotation.Aspect
@EnableAspectJAutoProxy
public class Aspect {
    @Pointcut("execution(* com.yqg.aopannotation.MaJiang.zimo(..))")
    public void pointcut(){}
@Before(value = "pointcut()") public void before(){ System.out.println("我听牌了"); }
@After("pointcut()") public void after(){ System.out.println("快给钱"); }
@AfterThrowing("pointcut()") public void exception(){ System.out.println("我诈糊了"); }
@Around("pointcut()") public void around(ProceedingJoinPoint joinPoint){ System.out.println("我听牌了啊"); try { joinPoint.proceed(); } catch (Throwable throwable) { System.out.println("我诈糊了啊"); throwable.printStackTrace(); } System.out.println("快给钱啊"); } }

  

原文地址:https://www.cnblogs.com/yanqingguo/p/10398223.html