开发基础
开发基础笔记
mybatis-plus通用的service方法
通过jenkins配置前后端自动打包及发布
mybatis-plus实现分页的方式
Java极客技术公众号PDF
狂神说SpringBoot
Hashids java 版使用
SpringBoot
1、Web快速开发
2、结果集的封装
3、集成MyBatis实现数据库操作
4、Springboot @Validated参数校验
5、SpringBoot全局异常处理
6、拦截器HandlerInterceptor
7、集成Swagger实现API自动生成
8、集成knife4j实现API自动生成
9、Springboot集成MyBatis-Plus快速入门
10、springboot自定义注解及AOP切面使用
11、使用Shiro实现登陆和权限认证,基于MyBatis
12、集成SpringSecurity实现授权认证
13、SpringBoot集成EasyExcel实现数据导入与导出
14、Spring Task定时任务的实现
15、Quartz快速上手与实践
16、如何用代码实现Spring IOC
17、SpringBoot集成JWT,实现接口的鉴权交互
SpringCloud
Nacos作为服务注册中心
seata1.6.1 结合springcloud实现分布锁的技术笔记
一些技术博客推荐
前端面试相关
看这一篇就够了
java.util包常用的类和接口
CountDownLatch介绍与使用
Common-lang3使用入门
Hutool简单使用入门
lombok 介绍及基本使用方法
git项目统计成员代码行数和提交的次数
mysql 逗号分隔的数据 like查询
使用sonar进行代码质量检查
线上使用jmeter进行压测的时候,使用Arthas诊断工具排查响应慢的接口
php结合phpstudy8、vscode开启xdebug进行代码调试
node-red使用入门
本文档使用 MrDoc 发布
-
+
首页
10、springboot自定义注解及AOP切面使用
## 1、引入坐标 ~~~xml <!-- AOP --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> ~~~ ## 2、新建一个AOP类 放到com.mmno.aop包下 ~~~java @Component @Aspect // 标注为切面 public class LogAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 切入点表达式,表示切入点为控制器包中的所有方法 @Pointcut("within(com.item.controller..*)") public void LogAspect() { } // 切入点之前执行 @Before("LogAspect()") public void doBefore(JoinPoint joinPoint) { logger.info("访问时间:{}--访问接口:{}", new Date(), joinPoint.getSignature()); } } ~~~ 项目在启动后,所有controller层的的访问请求都会被 监测到,我们访问一下URL,然后调用 DemoController.helloWorld()方法,会打印如下的日志: ~~~ 2022-11-02 22:16:36.784 INFO 19764 --- [nio-8080-exec-1] com.mmno.aop.LogAspect : 访问时间:Wed Nov 02 22:16:36 CST 2022--访问接口:ResponseEntity com.mmno.controller.DemoController.helloWorld() 2022-11-02 22:18:47.956 INFO 19764 --- [nio-8080-exec-4] com.mmno.aop.LogAspect : 访问时间:Wed Nov 02 22:18:47 CST 2022--访问接口:ResponseEntity com.mmno.controller.DemoController.helloWorld() ~~~ 上面的切面方法可以说是小试牛刀,更强大的切面功能等你发掘,比如使用AOP 的环绕通知,可以监测到每个方法执行的时间,这样很容易通过日志查看到哪些方法比较耗时,然后去做进一步的代码优化。 #### 环绕通知 ##### 新建一个 ServiceAspect.java的环绕通知的切面类,代码如下: ~~~java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 服务层方法切面 */ @Component @Aspect // 标注为切面 public class ServiceAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 切入点表达式,表示切入点为服务层包中的所有方法 @Pointcut("within(com.mmno.controller..*)") public void ServiceAspect() { } @Around("ServiceAspect()") // 环绕通知 public Object deAround(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis();// 记录开始时间 Object result = joinPoint.proceed(); logger.info("接口层方法:{}--执行时间:{}毫秒", joinPoint.getSignature(), System.currentTimeMillis() - startTime); return result; } } ~~~ 日志打印如下: ~~~ 2022-11-02 22:26:50.355 INFO 8900 --- [nio-8080-exec-1] com.mmno.aop.ServiceAspect : 接口层方法:ResponseEntity com.mmno.controller.DemoController.helloWorld()--执行时间:19毫秒 ~~~ ## 自定义注解配合AOP实现日志记录 待补充 ## 自定义注解配合拦截器实现鉴权 待补充
superadmin
2023年10月15日 16:53
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码