ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

SpringMvc框架中如何使用Aop面向切面编程

2020-02-20 19:08:28  阅读:320  来源: 互联网

标签:SpringMvc void PointCut 切面 Aop println org 除法 public


一、配置文件

1、配置pom.xml配置文件,导入所需要的类

 <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.0.7.RELEASE</version>
    </dependency> 复制代码

2、配置springmvc.xml配置文件

 <!-- 配置组件扫描 -->
 <context:component-scan base-package="Controller,Service,Dao" />
 <!-- 启动AspectJ自动代理 -->
 <aop:aspectj-autoproxy proxy-target-class="true"/> 复制代码

二、代码实战演练

1、写一个基础函数

@RestController
public class AopController {
    @RequestMapping(path = "/div")
    public int div(@RequestParam(name = "i") int i, @RequestParam(name = "j") int j){
        return i/j;
    }
} 复制代码

2、写一个切面类,包含四种基本功能:前置通知:@Befor,后置通知:@After,返回通知:@AfterReturning,异常通知:@AfterThrowing。注意要用@Aspect注解这个类,告诉Ioc容器这是个切面类。

package Controller;

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

import java.util.Arrays;

@Aspect
//Aspect告诉容器这是一个切面类
@Component
//Component将这个类导入容器
public class AopAspectj {

    //pointcut获取公共的切入点
    @Pointcut(value = "execution(public * Controller.AopController.*(..))")
    public void PointCut(){ }
    
    //@Before 表述在方法前执行
    @Before(value = "PointCut()")
    //JoinPoint一定要出现在参数表的第一位
    public void divStart(JoinPoint joinPoint){
        //获取参数
        Object[] Arg = joinPoint.getArgs();
        System.out.println(""+joinPoint.getSignature().getName()+"除法开始"+ Arrays.asList(Arg) +"");
    }
    //joinPoint.getSignature()获取类的信息

    //@After 表示在方法之后执行
    @After("PointCut()")
    public void divEnd(){
        System.out.println("除法结束");
    }

    //AfterReturning 表示在返回之后执行
    @AfterReturning(value = "PointCut()",returning ="result")
    public void divReturn(Object result){
        System.out.println("除法正常返回结果"+result+"");
    }

    //@AfterThrowing 表示抛出异常
    @AfterThrowing(value = "PointCut()",throwing = "exception")
    public void divException(Exception exception) {
        System.out.println("除法异常"+exception+"");
    }
} 复制代码

3、测试,运行项目之后,使用url: http://localhost:8080/div?i=1&&j=1,控制台打印的信息

div除法开始[1, 1]
除法结束
除法正常返回结果1 

 

Sqdmn 发布了193 篇原创文章 · 获赞 40 · 访问量 1万+ 私信 关注

标签:SpringMvc,void,PointCut,切面,Aop,println,org,除法,public
来源: https://blog.csdn.net/Sqdmn/article/details/104415602

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有