springboot+自定义注解+自定义aop前置增强+自定义异常+自定义异常捕获

doge-elder      2022-05-06     389

关键词:

开篇

想要在一些方法执行之前要进行一个逻辑判断,

本来想使用拦截器来进行拦截但是后来还是说声算了.

想到使用AOP的前置增强自定义异常自定义异常捕获可以解决这个问题,

一次性用了这么多,就是想把之前比较模糊的东西重新拿起来

1.我们先自定义一个注解

 1 /**
 2  * @program: shiro-demo
 3  * @description: 自定义注解
 4  * @author: @DogElder
 5  * @create: 2020-04-18 20:42
 6  **/
 7 ?
 8 @Target(ElementType.METHOD)
 9 @Retention(RetentionPolicy.RUNTIME)
10 public @interface TestAnnotation {
11 }

 

2.自定义一个异常类

  我们首先要先导入AOP依赖

1 <!--aop-->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-starter-aop</artifactId>
5 </dependency>

 

 1 import lombok.Data;
 2 ?
 3 /**
 4  * @program: shiro-demo
 5  * @description: 自定义异常类
 6  * @author: @DogElder
 7  * @create: 2020-04-18 21:11
 8  * 要继承RuntimeException
 9  **/
10 @Data
11 public class TestExcption extends RuntimeException {
12     
13     private String code;
14     private String message;
15     
16 //    这个地方需要写一个有参构造
17     public TestExcption(String code, String message) {
18         this.code = code;
19         this.message = message;
20     }
21 }

 

异常捕获

 1 /**
 2  * @program: shiro-demo
 3  * @description: 异常处理
 4  * @author: @DogElder
 5  * @create: 2020-04-18 21:20
 6  **/
 7 @RestControllerAdvice
 8 public class TestExceptionHandler {
 9 ?
10 ?
11     /**
12     * @Description: 异常捕获
13     * @Param: java.util.Map<java.lang.String,java.lang.Object>
14     * @return: java.util.Map<java.lang.String,java.lang.Object>
15     * @Author:@Dog_Elder
16     * @Date: 2020/4/18
17     */
18     @ExceptionHandler(TestExcption.class)
19     public Map<String, Object> handleCustomException(TestExcption customException) {
20         Map<String, Object> error = new HashMap<>();
21         error.put("code", customException.getCode());
22         error.put("message", customException.getMessage());
23         return error;
24     }
25 }
26 ?

 

 

3.然后我们自定义一个切面类

 1 /**
 2  * @program: shiro-demo
 3  * @description: 自定义切面
 4  * @author: @DogElder
 5  * @create: 2020-04-18 20:49
 6  **/
 7 @Configuration
 8 @Aspect
 9 public class TestAop {
10 ?
11     
12     /**
13      * @Description: 声明一个切入点
14      * @Param: void
15      * @return: void
16      * @Author:@Dog_Elder
17      * @Date: 2020/4/18
18      * @Pointcut 声明一个切入点 参数为切点表达式
19      * 注意: 这里的切入点是@annotation注解类的全路名 (看你们声明的切入点是在那里进行更换)
20      */
21     @Pointcut("@annotation(com.shiro.shiro_demo.config.annotation.TestAnnotation)")
22     public void testPointCut() {
23 ?
24     }
25 ?
26     /**
27      * @Description: 声明一个前置增强
28      * @Param: void
29      * @return: void
30      * @Author:@Dog_Elder
31      * @Date: 2020/4/18
32      * @Before 前置增强 参数为切点方法
33      * 注意:抛异常 抛异常 抛异常 throws RuntimeException   和 throw
34      *
35      */
36     @Before("testPointCut()")
37     public void testBefore() throws RuntimeException{
38 //        这里可以实现你的逻辑代码 (因为是demo)
39 //        我就写一个简单的小例子
40         int n=1;
41         if (n!=0) {
42             //这个地方就是我们写的自定义的异常
43            throw  new TestExcption("401","无权限");
44         }
45     }
46     
47 }

 

测试

技术图片

技术图片

 

 

技术图片

 

技术图片

END

springboot+aop+自定义注解

  为了记录日志的使用常常需要写大量而又重复的代码,而通过注解的形式可以大量的减少代码量;  一.maven引入AOP的依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>&... 查看详情

springboot整合aop日志管理(代码片段)

1.开发前准备1.1前置知识java基础自定义注解、反射SpringaopSpringBoot简单基础知识即可1.2环境参数开发工具:IDEA基础环境:Maven+JDK8所用技术:SpringBoot、lombok、mybatisplus、SpringaopSpringBoot版本:2.1.41.3涉及知识点自定义注解、反射spring... 查看详情

springboot切换数据源(自定义注解,aop)(代码片段)

参考网上文章,代码仅作为记录        DataSource是和线程绑定的,动态数据源的配置主要是通过继承AbstractRoutingDataSource类实现的,实现在AbstractRoutingDataSource类中的protectedObjectdetermineCurrentLookupKey()方法来获取数据... 查看详情

springboot切换数据源(自定义注解,aop)(代码片段)

参考网上文章,代码仅作为记录        DataSource是和线程绑定的,动态数据源的配置主要是通过继承AbstractRoutingDataSource类实现的,实现在AbstractRoutingDataSource类中的protectedObjectdetermineCurrentLookupKey()方法来获取数据... 查看详情

springboot入门十八,自定义注解的简单实现

项目基本配置参考文章SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可,此示例springboot升级为2.2.1版本。 1.pom.xml添加aop支持<!--引入aop切面支持--><dependency><groupId>org.springframewor... 查看详情

自定义注解结合springaop实现权限,参数校验,日志等等功能(代码片段)

...解灵活使用(ParamterCheckComp参数校验组合类)3.在SpringBoot上面配置上Aop进行拦截实现3.1Aop的5大通知,在什么地方进行拦截的通知4.自定义的注解的使用FieldCheck可以作用在字段上面5.ModelCheck参数使用2.权限校验实现注意&... 查看详情

aop通过反射获取自定义注解

 自定义注解:@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic@interfaceDemoAnno{Stringvalue()default"";}AOP:@Pointcut("@annotation(com.hephae.aop.aop.DemoAnno 查看详情

springboot自定义注解收集操作日志(代码片段)

​对于日志收集,是系统离不开的功能,那么如何实现简易的日志收集呢。市面上最常见的就是使用自定义注解。本文将介绍如何使用自定义注解收集日志。1.添加自定义注解@Target(ElementType.PARAMETER,ElementType.METHOD)@Re... 查看详情

springboot自定义注解收集操作日志(代码片段)

​对于日志收集,是系统离不开的功能,那么如何实现简易的日志收集呢。市面上最常见的就是使用自定义注解。本文将介绍如何使用自定义注解收集日志。1.添加自定义注解@Target(ElementType.PARAMETER,ElementType.METHOD)@Re... 查看详情

springboot:如何书写一个自定义的enable*注解

参考技术A1.新建自定义的注解2.应用此注解到配置类3.这时候需要在EnableCustomFeature类中通过@Import的方式引入一系列需要前置处理的Bean类上述通过@Import方式做的原因,主要是将@Import标记的配置类中的bean作为ApplicationContext处理使... 查看详情

实现自定义springaop注解(代码片段)

实现自定义SpringAOP注解翻译原文链接ImplementingaCustomSpringAOPAnnotation1.介绍在本文中,我们将使用Spring中的AOP支持来实现自定义AOP注解。首先,我们将给出AOP的高级概述,解释它是什么及其优点。在此之后,我们将逐步实现我们的... 查看详情

自定义注解-基于aop(代码片段)

依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>  注解1(不带参数):/***seatest使用AOP自定义注解(不 查看详情

springaop的自定义注解实践

...应注解即可,   今天我们来实现下SpringAOP的自定义注解,用来在前置通知中做下权限校验,有利于我们代码的解藕,提高复用性,增加代码B格; & 查看详情

通过aop拦截自定义注解实现相应的功能处理

1、自定义注解@Retention(RetentionPolicy.RUNTIME)@Target(value={ElementType.METHOD})public@interfaceResultHandle{  Class<?>handler()defaultResultHandler.class;} 2、定义方法拦截器实现ResultHandleAnnotationMe 查看详情

实现自定义springaop注解(代码片段)

实现自定义SpringAOP注解翻译原文链接ImplementingaCustomSpringAOPAnnotation1.介绍在本文中,我们将使用Spring中的AOP支持来实现自定义AOP注解。Inthisarticle,we’llimplementacustomAOPannotationusingtheAOPsupportinSpring.首先,我们将给出AOP的 查看详情

springboot自定义注解(代码片段)

背景知识在Java中注解分为两种,元注解和自定义注解。什么是自定义注解:开发者自己定义的注解,包括框架提供的例如spring框架提供的@Value@Autowired等等。什么是元注解:描述注解的注解(为自定义注... 查看详情

jpom-aop+自定义注解实现操作日志记录

文章目录地址版本源码解析-AOP+自定义注解实现操作日志记录地址Gitee:https://gitee.com/dromara/Jpom官网:https://jpom.io/一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。版本我们以2.8.12为例子,鉴赏学... 查看详情

springboot自定义注解+aop+redis实现防接口幂等性重复提交,从概念到实战(代码片段)

一、前言在面试中,经常会有一道经典面试题,那就是:怎么防止接口重复提交?小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重视。最近在测试过程中,发现了多次提交... 查看详情