AspectJ的注解开发AOP:切点定义

通过@Pointcut为切点命名,方便我们统一管理

在每个通知内定义切点,会造成工作量大,不易维护,对于重复的切点,可以使用@Pointcut进行定义

切点方法:private void无参方法,方法名为切点名

当通知多个切点时,可以使用||来进行连接

具体代码:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

import java.math.BigInteger;

@Aspect
public class aspectj {
    @Before(value = "execution(* com.AspecJ.xiaomaoDao.*(..))")
    public void before(){
        System.out.println("我是前置通知!");
    }

    @AfterReturning(value = "Mypoint2()",returning = "element")
//    使用returning来接受返回值
    public void After(Object element){
        System.out.println("我删除了"+element); //打印输出了返回值
    }

    @Around(value="MyPoint1()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object obj=null;
        System.out.println("环绕前");
        try {
            obj=joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("环绕后");
        return obj;
    }

    @AfterThrowing(value = "MyPoint()",throwing = "throwinfo")
    public void throwafter(Throwable throwinfo){
        System.out.println("发生了异常,异常信息如下:");
        System.out.println(throwinfo.getMessage());
    }

    @After(value = "MyPoint()")
    public void after(){
        System.out.println("最终通知执行了!");
    }

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.find())")
    public void MyPoint(){}

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.update())")
    public void MyPoint1(){}

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.delete())")
    public void Mypoint2(){}

}

原文地址:https://www.cnblogs.com/xiaolaha/p/11371509.html

时间: 2024-08-01 18:53:27

AspectJ的注解开发AOP:切点定义的相关文章

AspectJ的注解开发AOP:环绕通知的学习

环绕通知的注解为@Aroundaround方法的返回值就是目标代理方法执行返回值参数ProceedingJoinPoint可以拦截目标方法的执行切面类配置如下i mport org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotat

AspectJ的注解开发AOP:最终通知的学习

最终通知的注解为@After 无论是否发生异常,最终通知总是被执行 在切面类中如下定义使用: @After(value = "execution(* com.AspecJ.xiaomaoDao.find())") public void after(){ System.out.println("最终通知执行了!"); } 原文地址:https://www.cnblogs.com/xiaolaha/p/11370918.html

AspectJ的注解开发AOP:异常抛出通知的学习

异常抛出通知使用@AfterThrowing 在切面类中配置: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import java.math.BigInteger; @Aspect public class aspectj { // @Before(value = "execution(* com.AspecJ.xiaomaoDao.*(..))") // publ

Spring AspectJ基于注解的AOP实现

对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且还支持注解式开发.所以,Spring又将AspectJ对于AOP的实现也引入到了自己的框架中.     在Spring中使用AOP开发时,一般使用AspectJ的实现方式. Spring的经典AOP配置方案  01.使用的是Aspectj第三方框架,实现了AOP思想  02.注解配置的AOP  03.纯POJO <aop:c

Spring_Spring与AOP_AspectJ基于注解的AOP实现

一.AspectJ.Spring与AOP的关系 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.(百度百科) Spring又将AspectJ的对于AOP的实现引入到自己的框架中. 在Spring中使用AOP开发时,一般使用AspectJ的实现方式. 二.AspectJ的通知类型 前置通知 后置通知 环绕通知 异常通知 最终通知 三.AspectJ的切入点表达式 表达式中加[]的部分

Spring-AOP注解开发

微信公众号:Java修炼手册关注可获取3T免费学习资料,助你从0到1; **AOP注解开发*****AOP代码实现(执行计算前后输入输出目标代码)***1 定义一个业务逻辑类(MathCalculator):在业务逻辑运行的时候将日志进行打印(方法之前.方法运行结束.方法出现异常) 1 public class MathCalculator { 2 public int div(int i,int j){ 3 System.out.println("MathCalculator...div...

Spring学习笔记四(AOP中的通知参数和注解开发)

1.前言 上一篇博客介绍了如何通过AOP来切入我们想实现的公共性的功能,这篇博客来讲一下,当我们拦截到方法后,如何来获取通知参数.这也是AOP的精髓所在,通过AOP可以实现偷梁换柱的功能.我们把原来要执行的方法的参数获取到,然后换一套参数执行.下面来跟着我看一下吧! 2.AOP的通知参数 有时我们想通过AOP拦截到我们要加入通知的切点类的参数,通俗的说就像拿到拦截的方法的参数值,然后如果不合适的话,我们可以修改一下或者做一些其他的操作.例如用户登录的功能,我们可以把验证身份的功能抽离出来,然后在

spring注解开发及AOP

Spring的bean管理(注解) 注解介绍 1 代码里面特殊标记,使用注解可以完成功能 2 注解写法 @注解名称(属性名称=属性值) 3 注解使用在类上面,方法上面 和 属性上面 Spring注解开发准备 1 导入jar包 (1)导入基本的jar包 (2)导入aop的jar包 2 创建类,创建方法 3 创建spring配置文件,引入约束 (1)第一天做ioc基本功能,引入约束beans (2)做spring的ioc注解开发,引入新的约束 <beans xmlns:xsi="http://

Spring使用AspectJ开发AOP:基于Annotation

基于 Annotation 的声明式 在 Spring 中,尽管使用 XML 配置文件可以实现 AOP 开发,但是如果所有的相关的配置都集中在配置文件中,势必会导致 XML 配置文件过于臃肿,从而给维护和升级带来一定的困难. 为此,AspectJ 框架为 AOP 开发提供了另一种开发方式——基于 Annotation 的声明式.AspectJ 允许使用注解定义切面.切入点和增强处理,而 Spring 框架则可以识别并根据这些注解生成 AOP 代理. 关于 Annotation 注解的介绍如表 1