SpringBoot学习笔记:整合aop
Posted 听风者-better
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot学习笔记:整合aop相关的知识,希望对你有一定的参考价值。
本文介绍SpringBoot整合aop(面向切面编程)
一.创建一个SpringBoot项目
-
引入相应的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
-
实现AOP切面
@Component @Aspect public class AopComponent
-
常用的注解
@Pointcut
:定义一个切面,做一些处理的切入点@Before
:在切面方法之前执行方法@After
:在切面方法之后执行方法@AfterReturning
:在切面方法执行完毕之后,对其返回值做处理@AfterThrowing
:在切面方法执行抛出异常时进行处理@Around
:在切面方法执整改过程中参与执行
二.编写具体实现代码
-
添加切面方法
@Component @Aspect public class AopComponent Logger logger = LoggerFactory.getLogger(AopComponent.class); /** * execution(* com.twy.aop.service..*.*(..)) 表达式为例,语法如下: * execution() 为表达式主体 * 第一个 * 号的位置:表示返回值类型, * 表示所有类型 * 包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包, * com.twy.aop.service 包、子包下所有类的方法 * 第二个 * 号的位置:表示类名, * 表示所有类 * *(..) :这个星号表示方法名, * 表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数 */ @Pointcut("execution(* com.twy.aop.service..*.*(..))") public void test() @Before(value = "test()") public void berfore(JoinPoint joinPoint) String name = joinPoint.getSignature().getName(); logger.info("前置方法:", name); @After(value = "test()") public void after(JoinPoint joinPoint) String name = joinPoint.getSignature().getName(); logger.info("后置方法:", name); @AfterReturning(value = "test()", returning = "result") public void afterReturning(JoinPoint joinPoint, Object result) String name = joinPoint.getSignature().getName(); logger.info("后置返回方法:,结果:", name, result); @AfterThrowing(value = "test()", throwing = "e") public void afterReturning(JoinPoint joinPoint, Exception e) String name = joinPoint.getSignature().getName(); logger.info("后置抛出异常方法:,抛出异常:", name, e.getMessage()); @Around(value = "test()") public void around(ProceedingJoinPoint proceedingJoinPoint) logger.info("环绕开始方法"); try Object obj = proceedingJoinPoint.proceed(); logger.info("返回结果:", obj); catch (Throwable throwable) logger.info("抛出异常:", throwable.getMessage()); throwable.printStackTrace(); logger.info("环绕结束方法");
-
创建接口
@Component public class TestService public String test(Integer id) return "test";
-
创建调用接口请求
@RestController public class TestController @Autowired public TestService testService; @GetMapping("/test") public String test(Integer id) return testService.test(id);
三、测试
这里可以看出@Around
里返回了结果,@AfterReturning
没有返回结果,@Around
比@AfterReturning
、@AfterThrowing
先进行处理,因此我们需要注意这三个注解同时使用时的冲突
以上是关于SpringBoot学习笔记:整合aop的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot学习笔记之表单验证@Valid与AOP切面
springboot学习笔记-5 springboot整合shiro