关键词:
想要在一些方法执行之前要进行一个逻辑判断,
本来想使用拦截器来进行拦截但是后来还是说声算了.
想到使用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实现防接口幂等性重复提交,从概念到实战(代码片段)
一、前言在面试中,经常会有一道经典面试题,那就是:怎么防止接口重复提交?小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重视。最近在测试过程中,发现了多次提交... 查看详情