SpringBoot自定义注解及AOP的开发和使用详解
一、引入 AOP 依赖
自定义注解一般会和 AOP(切面)
结合使用,所以我们首先需要在项目中引入相应的依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
二、创建自定义注解 Log
annotation.Log:
import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Log { String value() default ""; }
@Target:
表明该注解可以作用的目标是谁,也就是你的注解是用来修饰方法?类?还是属性?这里是表明作用在方法上。@Retention:
表明该注解作用的生命周期,这里表明在运行时有效。@Documented:
表明被它修饰的注解将被javadoc
提取成文档。
三、创建 AOP切面类
aspect.LogAspect:
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; @Aspect @Component public class LogAspect { @Pointcut("@annotation(com.jk.annotation.Log)") public void pointCut(){} @Before("pointCut()") public void before() { System.out.println("前置通知..."); } @After("pointCut()") public void after() { System.out.println("后置通知..."); } @Around("pointCut()") public void around(ProceedingJoinPoint point) throws Throwable { System.out.println("环绕通知前..."); point.proceed(); System.out.println("环绕通知后..."); } }
@Aspect:
表明该类为切面类,定义切面类时必须加这个注解。@Component:
表明把该类交给IOC
容器控制。@Pointcut:
定义切入点,结合@annotation(@interface)
使用,表明该方法为切入点。@interface
必须写自定义注解的全路径名。@Before:
表明被自定义注解代理的方法执行前,先调用的方法。@After:
表明被自定义注解代理的方法执行后,return
前调用的方法。@Around:
将被自定义注解代理的方法封装起来,环绕通知(即在他之前之后通知),point.proceed()
表明执行的目标方法。
四、自定义注解测试
controller.TestController:
import com.jk.annotation.Log; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/test") public class TestController { @GetMapping @Log public void test() { System.out.println("执行test方法"); } }
在 test()
方法上添加了一个 @Log
注解,他会在执行这个方法时,执行我们之前定义切面时创建的前置方法、后置方法、环绕方法。
在 SpringBoot 中使用自定义注解就是如此简单,一般在通知方法中我们还会结合反射来获取执行方法的一些信息,如方法名,参数,响应值等,在后面我也会新开一篇文章专门讲讲反射,有兴趣的掘友可以关注一下哦!
到此这篇关于SpringBoot自定义注解及AOP的开发和使用详解的文章就介绍到这了,更多相关SpringBoot注解及AOP开发和使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mybatis配置之<environments>配置元素详解
这篇文章主要介绍了Mybatis配置之<environments>配置元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01详解springboot项目带Tomcat和不带Tomcat的两种打包方式
这篇文章主要介绍了详解springboot项目带Tomcat和不带Tomcat的两种打包方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09Java和scala实现 Spark RDD转换成DataFrame的两种方法小结
今天小编就为大家分享一篇Java和scala实现 Spark RDD转换成DataFrame的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-06-06Springboot集成Elasticsearch的步骤与相关功能
ElasticSearch是开源搜索平台领域的一个新成员, ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎,这篇文章主要给大家介绍了关于Springboot集成Elasticsearch的相关资料,需要的朋友可以参考下2021-12-12Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法
今天小编就为大家分享一篇关于Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03
最新评论