SpringFrameworkAOP笔记

SpringAOP

想不想学AOP啊?我教你啊!=_=

一、AOP的相关概念

AOP面向切面编程,不多说,看概念就去查百度。

相关术语:

通知:切面要完成的工作。

连接点:在应用执行过程中能够插入切面的一个点。

切点:满足时机的连接点中的一个或多个。

切面:需要执行通知的类。

二、Spring中AOP的使用

1、JavaConfig方式

配置类:

@Configuration
@EnableAspectJAutoProxy
public class JavaConfig{
    
}

切面类:

@Aspect
@Component
public class MyAopClass {
    @Pointcut(value = "execution(* cn.zzcfirst.boottest01.controller.TestController.getTaco(..))")
    public void pointcut(){}

    @Before(value = "pointcut()")
    public void before(JoinPoint jp){
        System.out.println(jp.getArgs());
        System.out.println("---> before method");
    }

    @After(value = "pointcut()")
    public void after(){
        System.out.println("--->after");
    }

    @AfterReturning(value = "pointcut()", returning = "returnValue")
    public void afterReturning(Object returnValue){
        System.out.println("--->returning");
        System.out.println(returnValue);
    }

    @AfterThrowing(value = "pointcut()", throwing = "err")
    public void afterThrowing(Exception err){
        System.out.println("--->throwing");
        System.out.println(err);
    }

    @Around(value = "pointcut()")
    public void aroundAdivce(ProceedingJoinPoint jp){
        try{
            System.out.println("before");
            System.out.println("after");
            jp.proceed();
            System.out.println("return");
        }catch(Throwable e){
            System.out.println("throw");
        }
    }
}

先来看看我们写的这些东西有什么用。首先我们创建了一个配置类 — JavaConfig。这个类被@Configuration和@EnableAspectJAutoProxy修饰,其中EnableAspectJAutoProxy表示开启AspectJ注解驱动。

具体解释:

@Aspect修饰切面类,表示是一个切面。

@Component修饰切面使得切面可以被添加到容器中。

@Pointcut修饰了一个切点,表示在哪个或哪些方法运行的时候要运行切面方法(表达式语法规则:限定符 返回值 方法全限定名(参数))。

@Before方法在切点执行之前执行,可以使用JoinPoint类作为参数,获取传入切点方法的参数。

@After在切点执行之后执行。

@AfterReturning方法在切点执行之后,且返回结果之后执行,可以使用它的属性returning和切面方法的参数绑定,获取切点方法的返回值。

@AfterThrowing方法在切点抛出异常后执行,可以使用throwing属性和切面方法参数绑定,获取切点抛出的异常。

@Around方法是环绕通知,结合了以上四种基本的通知,格式如上代码所示。

2、XML配置方式

<aop:config>
    <aop:aspect ref="MyAopClass">
    	<aop:pointcut 
            id="pointcut"
            expression="表达式"/>
        <aop:before 
        	pointcut-ref="pointcut"
            method="要执行的方法"/>
        <aop:after 
        	pointcut-ref="pointcut"
            method="要执行的方法"/>
        <aop:after-returning 
        	pointcut-ref="pointcut"
            method="要执行的方法"/>
        <aop:after-throwing 
        	pointcut-ref="pointcut"
            method="要执行的方法"/>
        <aop:around 
        	pointcut-ref="pointcut"
            method="要执行的方法"/>
    </aop:aspect>
</aop:config>

以上XML配置方式显然有些繁杂,也可以使用XML+注解的方式进行配置:

<aop:aspectj-autoproxy/> + 注解即可实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值