Spring整理系列(14)——基于注解的AspectJ风格实现spring AOP

1、需要引用的jar包及xml文件规范,请查看上一篇:Spring整理系列(13)——基于配置方式实现spring AOP

2、基于Aspectj注解风格,xml配置

    <!-- 开启aspectj风格自动代理 -->
    <aop:aspectj-autoproxy/>

    <!-- 注册登录业务bean -->
    <bean name="loginService" class="com.test.spring.aop.LoginServiceImpl"></bean>

    <!-- 注册登录业务日志切面bean -->
    <bean name="loginLogAspect" class="com.test.spring.aop.LoginLogAspect"></bean>

3、用注解配置切面类(业务接口及其实现类同样查看上一篇)

package com.test.spring.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
/** 
 * @Description: 登录业务日志的切面
 * 添加@Aspect注解,标注该类为切面类
 */
@Aspect
public class LoginLogAspect {

    //配置切入点,将连接点和通知联通起来
    @Pointcut("execution(* com.test.spring.aop.*.*(..))")  
    public void loginPointcut(){}



    //前置通知,可以直接配置切入点表达式
    @Before("execution(* com.test.spring.aop.LoginServiceImpl.init(..))")
    public void beforeLogin(JoinPoint point){
        System.out.println("前置通知。。。");
    }

    //后置通知,引用切入点表达式方法
    @After(value = "loginPointcut()")
    public void afterLogin(){
        System.out.println("后置通知。。。");
    }

    //环绕通知,有返回值,第一个参数必须是ProceedingJoinPoint类型
    @Around("loginPointcut()")
    public Object aroundLogin(ProceedingJoinPoint point) throws Throwable{
        System.out.println("环绕通知,业务方法执行之前。。。");

        Object obj = point.proceed();//向下执行业务方法

        System.out.println("环绕通知,业务方法执行之后。。。");
        return obj;
    }

    //返回后通知
    @AfterReturning(value = "loginPointcut()")
    public void afterReturningLogin(){
        System.out.println("返回后通知。。。");
    }

    //抛出异常后通知
    @AfterThrowing("loginPointcut()")
    public void afterThrowingLogin(){
        System.out.println("抛出异常后通知。。。");
    }
}

关于注解风格的切入点表达式使用,可以查看:Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值