spring中AspectJ(16)

本文介绍如何在Spring框架中集成AspectJ实现面向切面编程(AOP),涵盖@AspectJ注解配置、切入点(pointcut)定义及各种通知(advice)的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2016/1/18 11:44:08


1.AspectJ

  • @AspectJ的风格类似纯Java注解的普通Java类
  • Spring可以使用AspectJ来做切入点解析
  • AOP的运行时仍旧是纯的Spring AOP,对AspectJ的编译器或者织入无依赖性
  • @AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别注册并应用
  • 用@Aspect注解的类可以有方法和字段,它们也可能包括切入点(pointcut),通知(advice),和引入(Introduction)声明
  • Aspect注解是不能通过类路径自动检测发现的,所以需要配合使用@Component注释或者在xml配置bean
  • 一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排除

2.切入点的定义

  • 一个切入点可以通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void
  • 环绕通知使用@Around注解来声明,通知方法的第一个参数必须是ProceedingJoinPoint类型
  • 在通知内部调用ProceedingJoinPoint的proceed()方法会导致执行真正的方法,传入一个Object[]对象,数组中的值将被做为参数传递给方法

    @Aspect
    public class AspectClass {
        // 配置前置通知
        @Before("execution(* com.lovo.inter..*.t*(..))")
        public void beforeMethod() {
            System.out.println("执行beforeMethod方法");
        }
        // 配置后置通知
        @After("execution(* com.lovo.inter..*.t*(..))")
        public void afterMethod() {
            System.out.println("执行after方法");
        }
        // 配置环绕通知
        @Around("execution(* com.lovo.inter..*.g*(..))")
        public Object press(ProceedingJoinPoint point) {
            System.out.println("环绕执行前");
            Object returnObj = null;
            try {
                returnObj = point.proceed();
            } catch (Throwable e) {
                e.printStackTrace();
            }
            System.out.println("环绕执行后");
            return returnObj;
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值