Springboot 使用AOP及全局事件

举报
小毕超 发表于 2022/06/24 00:55:44 2022/06/24
【摘要】 Springboot 使用AOP及全局事件 一、AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护...

Springboot 使用AOP及全局事件

一、AOP

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

二、SpringBoot中使用AOP

1. pom

 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

  
 
  • 1
  • 2
  • 3
  • 4

2. 使用注解定义Aop

@Aspect
@Component
public class GlobAop {
    /**
     * 定义切入点
     */
    @Pointcut("execution(public * com.bxc.conformity.MulJdbc.*.*(..)))")
    public void BrokerAspect(){
    }


    @Before("BrokerAspect()")
    public void doBeforeGame(JoinPoint jp){
        String name = jp.getSignature().getName();
        System.out.println(name+"方法开始执行!");
    }

    @After("BrokerAspect()")
    public void doAfterGame(JoinPoint jp){
        String name = jp.getSignature().getName();
        System.out.println(name+"方法执行结束!");
    }


    @AfterReturning(value = "BrokerAspect()",returning = "result")
    public void doAfterReturningGame(JoinPoint jp,Object result){
        String name = jp.getSignature().getName();
        System.out.println(name+"方法返回 = " + result);

    }

    @AfterThrowing(value = "BrokerAspect()",throwing = "e")
    public void doAfterThrowingGame(JoinPoint jp,Exception e){
        String name = jp.getSignature().getName();
        System.out.println(name+"方法异常通知:"+e.toString());
    }

    @Around("BrokerAspect()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        return pjp.proceed();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

3. *号的意思

  1. 第一个*
    表示返回类型,*号表示所有的类型
  2. 第二个*
    表示类名,*号表示所有的类
  3. 第三个*
    *(…):表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。

二、全局事件

全局异常捕获

@ControllerAdvice
public class GlobalException {

    @ResponseBody
    @ExceptionHandler(Exception.class)
    public ResponseTemplate GlobException(Exception e, HttpServletResponse response){
        System.out.println("错误:"+e.toString());
        return ResFailTemplate.builder().message("err:"+e.toString()).build();
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43692950/article/details/107442758

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。