在SpringBoot的项目中经常会遇到自定义注解的情况,同时需要根据注解来对使用它的类、方法或属性进行操作。下面主要是使用拦截器的方式进行注解的拦截判断,这里主要是使用pom的方式进行开发。
1.因为是使用的拦截器,所以必须导入spring-boot-starter-web的引用:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2.自定义一个注解:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author liaoyubo * @version 1.0 2017/9/14 * @description 自定义一个注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LoggerAnnotation { }
3.自定义一个拦截器,用于注解的拦截:
import com.annotation.log.LoggerAnnotation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; /** * @author liaoyubo * @version 1.0 2017/9/14 * @description 通过拦截器的方式实现自定义的日志记录 */ public class LoggerInterceptor extends HandlerInterceptorAdapter{ private Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod handlerMethod = (HandlerMethod)handler; Method method = handlerMethod.getMethod(); //获取当前方法上的指定注解 LoggerAnnotation loggerAnnotation = method.getAnnotation(LoggerAnnotation.class); //判断当前注解是否存在 if(loggerAnnotation != null){ long startTime = System.currentTimeMillis(); request.setAttribute("startTime",startTime); logger.info("进入" + method.getName() + "方法的时间是:" + startTime); } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerMethod handlerMethod = (HandlerMethod)handler; Method method = handlerMethod.getMethod(); //获取当前方法上的指定注解 LoggerAnnotation loggerAnnotation = method.getAnnotation(LoggerAnnotation.class); //判断当前注解是否存在 if(loggerAnnotation != null){ long endTime = System.currentTimeMillis(); long startTime = (Long) request.getAttribute("startTime"); long periodTime = endTime - startTime; logger.info("离开" + method.getName() + "方法的时间是:" + endTime); logger.info("在" + method.getName() + "方法的时长是:" + periodTime); } } }
4.将拦截器类注入到适配器中,否则不能正常拦截访问。
import com.annotation.interceptor.LoggerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * @author liaoyubo * @version 1.0 2017/9/14 * @description 注册自定义的拦截器 */ @Configuration @EnableWebMvc @ComponentScan public class InterceptorRegister extends WebMvcConfigurerAdapter { @Bean public LoggerInterceptor loggerInterceptor(){ return new LoggerInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(loggerInterceptor()); } }
5.定义一个restful类用于测试:
import com.annotation.log.LoggerAnnotation; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author liaoyubo * @version 1.0 2017/9/14 * @description */ @RestController public class LoginController { @RequestMapping("/login") @LoggerAnnotation public void login(){ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }
启动项目,通过访问连接地址http://localhost:8080/annotationTest就可以得到以下
的输出结果:
2017-09-15 13:52:27.015 INFO 407336 --- [nio-8080-exec-1] c.a.interceptor.LoggerInterceptor : 进入login方法的时间是:1505454747015 2017-09-15 13:52:32.202 INFO 407336 --- [nio-8080-exec-1] c.a.interceptor.LoggerInterceptor : 离开login方法的时间是:1505454752202 2017-09-15 13:52:32.202 INFO 407336 --- [nio-8080-exec-1] c.a.interceptor.LoggerInterceptor : 在login方法的时长是:5187
相关推荐
在Spring Boot中,可以创建一个自定义注解,例如`@CustomResponse`,用于标记控制器方法,指示该方法应返回特定的数据结构。这个注解通常会包含一些元信息,如状态码、消息等,以便在处理过程中填充到返回结果中。...
在本例中,"springboot 脱敏自定义注解"意味着我们要创建一个自定义注解,标记在那些需要进行脱敏处理的方法上。自定义注解可以如下定义: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType....
在SpringBoot中,AOP的使用更为简洁,它简化了配置过程,使得开发者可以更专注于业务逻辑。 首先,我们来看看SpringBoot AOP中的各种注解。最基础的是`@Aspect`,用于标记一个类为切面类,这个类中会包含切点...
3. **Shiro的集成**:研究如何在SpringBoot应用中配置Shiro,包括安全配置、 Realm(认证和授权信息提供者)的实现以及自定义注解的编写和使用。 4. **Shiro的权限控制**:掌握如何使用Shiro的注解进行权限判断,如@...
自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...
springboot自定义注解的demo;通过本案例实现了通过自定义注解的拦截的方法可以设置访问权限;通过拦截器获取指定方法上的自定义的注解,然后判断当前的接口需不要权限校验;然后通过对应的访问去处理;demo里面的代码...
使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解...
springboot+拦截器+aop+自定义注解+本地线程实现统一接口日志记录,记录下接口所在模块、接口描述、接口请求参数、接口返回参数、接口请求时间以及接口耗时用于接口优化,接口记录参数以及操作人防止使用人员误操作...
在Java开发中,Spring框架是广泛使用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。Spring的注解功能极大地简化了配置,使得开发者可以更专注于业务逻辑。本篇将深入探讨如何自定义注解...
2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot aop依赖 2.1.2 引入fastjson依赖 2.2 .编写配置类SpringConfig.java 2.3.编写测试Controller 2.4 编写切面类...
总结来说,这个示例展示了如何在Spring Boot项目中自定义注解,将其应用于Java Bean的方法,以及如何利用AOP来实现全局扫描和自动执行。这样的实践在系统监控、性能分析和故障排查中非常有用,能够帮助开发者更好地...
Springboot结合自定义注解的使用 Springboot结合aop使用 接口限流思路
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...
本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了定义注解、定义注解处理类、使 Spring Boot 支持该拦截器三个方面的内容。 一、定义注解 在 Spring Boot 中,定义注解需要使用 @interface ...
在Java开发中,自定义注解是一种非常强大的工具,它允许我们为代码添加元数据,以便在运行时或编译时进行处理。本示例中,“自定义注解实现拦截SQL”是关于如何通过注解来动态修改执行的SQL语句,以在其中增加特定的...
在Spring Boot应用中,消息转换器(MessageConverter)扮演着至关重要的...在`helloSpringBoot2`项目中,你可以找到一个完整的自定义消息转换器示例,通过分析和学习这个示例,将有助于你更好地理解和运用这一特性。
在JAX-RS中,提供了NameBinding机制,简单理解NameBinding,就是把指定过滤器/拦截器通过自定义的名称注解绑定在某些匹配的资源方法上。Jersey, RESTeasy等框架都有相应的实现。 该代码利用Springboot模拟实现了...
本教程将探讨如何使用Java自定义注解来模拟实现这些SpringBoot相关的注解功能。 首先,我们来看`@Autowired`注解。`@Autowired`是Spring框架中的一个关键注解,用于自动装配bean。当我们想在类中注入某个依赖时,而...