Spring-AOP切面+Aspectj框架的使用

使用Aspectj框架进行AOP切面开发。

首先需要导入两个Jar包:
1. aspectjrt.jar
2. aspectjweaver-XXX.jar

Aspectj支持的五种注解:

  1. @Before: 前置通知, 在方法执行之前执行
  2. @After: 后置通知, 在方法执行之后执行
  3. @AfterReturning: 返回通知, 在方法返回结果之后执行
  4. @AfterThrowing: 异常通知, 在方法抛出异常之后
  5. @Around: 环绕通知, 围绕着方法执行

下面将使用两种方式进行开发。

形式一 : 使用注解形式结合Spring,
切面:AudienceAdvice类

@Aspect
public class AudienceAdvice {
   
    /**
     *  1> execution() : 指明一个表达式
     *  2> * *..UserService.*(..): 表达式说明
     *      (1) * : 修饰符 --> 例如:public 或public void
     *      (2) *. : 任意包名或子包名 
     *      (3) .UserService : 该切面只对UserService接口生效
     *      (4) .* : 所有的方法
     *      (5) (..) :方法可以有任意参数
     * 
     * 作用:任意包下的UserServiceImpl的任意方法,触发此AOP切面
     *  3> 表达式可以只写一次,当其他注解继续引用此表达式时,
     *     直接引用写了表达式的方法名即可
     *     例如: init() 方法 和 after() 方法的注解形式
     * */
    @Pointcut("execution(* *..UserService.*(..))")
    public void init(){};

    /**
     * 之后
     */
    @After("init()")
    public void after(){
        System.out.println("after");
    }


    /**
     * 之前
     */
    @Before("init()")
    public void before(){
        System.out.println("before");
    }

    /**
     * 环绕
     */
    @Around("init()")
    public void around(ProceedingJoinPoint jp){
        System.out.println("before");
        try {
            //执行方法
            jp.proceed();
        } catch (Throwable e) {
            e.prin
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值