简单明了的AOP切面编程教程

目录

文章学习

切面相关文章一   切面相关文章二 切面表达式1 表达式2

Demo

Ctrl & Service Demo:

AOP DEMO

执行结果

其他

最简单的切面方法Demo


 

文章学习

切面相关文章一   切面相关文章二 切面表达式1 表达式2

从上面的两片文章中可以知道页面术语包括:前置通知、后置通知、环绕通知、最终通知、异常通知,AOP是在不修改源码的情况下给程序动态统一添加功能,增加了代码的复用性省去了测试的时间、精简了代码。

AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

Demo

  • Ctrl & Service Demo:

  • AOP DEMO

package com.gisquest.zrzy.tdcbitem.aop;

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

/**
 * Created by Administrator on 2019/11/28.
 */
@Aspect
@Component
public class LogInterceptor {
    //这个可用来替代以后重复出现的. 直接在后面的Before("myMethod()")就行了.
//    @Pointcut("execution(public * com.dao.impl..*.*(..))")
    @Pointcut("execution(public * com.gisquest.zrzy.tdcbitem.impl.gyzd..*.*(..))")
    public void myMethod(){};

    //下面用到的是织入点语法, 看文档里面有. 就是指定在该方法前执行
    //@Before("execution(public void com.dao.impl.UserDAOImp.save(com.model.User))")
    //记住下面这种通用的, *表示所有
//    @Before("execution(public * com.dao.impl..*.*(..))")
    @Before("execution(public void com.gisquest.zrzy.tdcbitem.impl.gyzd.TdzdzbsxServiceImpl..*.*(..))")
    public void beforeMethod()
    {
        System.out.println("save start......");
    }

    //正常执行完后
//    @AfterReturning("execution(public * com.dao.impl..*.*(..))")
    @AfterReturning("execution(public * com.gisquest.zrzy.tdcbitem.impl.gyzd..*.*(..))")
    public void afterReturnning()
    {
        System.out.println("after save......");
    }

    //抛出异常时才调用
    @AfterThrowing("myMethod()")
    public void afterThrowing()
    {
        System.out.println("after throwing......");
    }

    //环绕, 这个特殊点.
    @Around("myMethod()")
    public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable
    {
        //加逻辑的时候, 不要依赖执行的的先后顺序
        System.out.println("method around start!");
        pjp.proceed();
        System.out.println("method around end!");
    }
}
  • 执行结果

其他

如果你切的是Dao层的insert或者update,可以写成下面的

aroundInsert 在环绕式声明中被调用

  • 最简单的切面方法Demo

  • AOP注解包括

@Pointcut   @Before   @After   @AfterReturning   @After

  • AOP注解执行顺序

@Around (method around start!)-》@Before -》进入XCtrl -》 进入XServiceImpl -》@Around(method around start!) -》@After -》@AfterReturing

转载文章公众号:https://mp.weixin.qq.com/s/vfPKWYcUa4yjJ4cnmIEaxQ

发布了206 篇原创文章 · 获赞 49 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/Sicily_winner/article/details/103289350