我们知道,在一个系统中,业务操作日志对我们很重要。那么以往我们更多的时候是写个方法,然后哪个模块需要加入日志,就引入这个接口。但是这种其实冗余了很多代码。今天我简单给大家介绍下采用spring AOP来统一帮我们处理业务操作日志。首先看下我的日志表的设计:DROP TABLE IF EXISTS `t_log`;
CREATE TABLE `t_log` (
`id` bigint(20) N
一、为什么需要AOP比如我们需要系统的每一个方法都要输出日志信息,那么我们可以写一个日志方法,然后在每一个方法中调用即可。 但是实际上这是不现实的,如果方法修改了,可能需要在每个实现这个功能的地方去重新改动代码。一旦要修改,就要打开所有调用到的地方去修改。现在我们用AOP的方式可以实现在不修改源方法代码的前提下,可以统一为原多个方法增加横切性质的“通用处理”。二、什么是AOP都说AOP好用,那现在
在之前一系列的文章中都是提供了全部的代码,在之后的文章中就提供核心的代码进行讲解。为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,比如常见的有:打开数据库连接/关闭数据库连接、打开事务/关闭事务
常用注解1、@Before修饰一个方法时,该方法将作为Before增强处理 使用@Before修饰事,需要指定一个value属性值,该属性值指定一个切入点表达式(既可以是一个已有的切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点 表示在切入点执行前需要进行的操作或者需要执行的方法2、@After同Before 表示在切入点执行后,进行哪些操作 通常用于资源释放3、 @Ar
目标由于项目是使用的是几年前的开源项目,只是实现了基础的CRUD业务功能,缺少基础设施建设,请求一个接口也没有任何日志打印,即使异常也不会有任何日志抛出,导致排查问题很困难,于是对其进行了二次改造。开启SQL打印在logback.xml中修改打印日志的级别 结果:每次请求打印了SQL,但是参数信息并没有打印,联调有问题时需要向前端要参数模拟出错情况的参数排查,于是采用了下面的方式来打印参数接口请求
一、缘由 在我们日常系统的开发中,不可避免的需要对外提供一些接口,比如公司多个系统需要调用我们负责的系统中某个接口、功能。而这类接口往往涉及到公司的数据,对于安全性需要一定的保证,总不能写一个接口,所有的调用都响应吧?所以就有了此文分享。二、方案任何技术和方案都具有多面性,有利也有弊,我们只能根据自己的实
关于aop对目标方法性能影响的一些记录今天记录一下自己对aop的一个理解误区,实际上是给过去初入java的自己一个交代 数年之前我刚入坑java的时候,公司对日志的打印把控的比较严格,因为项目比较大,大量的日志经常会导致系统整体运行速度不能满足业务需求。那么我的问题来了:logger不是说是使用aop实现的么,aop不是说完全不会影响原有程序的运行的么(所以永远都不要猜一个菜鸟心里在想什么),所以
转载
2023-08-17 23:35:47
157阅读
上面那种解决方法太原始,弊端在于方法中是业务处理的方法,却加入了不是业务需求的记录日志(记录日志是系统需求),这样就提高了业务的耦合性,不好。所以可以使用AOP来处理。Aspect Oriented Programing,是对OOP的一个互补。我们采用aop解决问题,是把代码封装到一个组件里面,完全面向一个Aspect编程。利用框架做一个织入的行为,让target和aspect相结合。 首先,我
目录一、项目中为什么要进行日志处理二、日志需要记录的内容三、使用一、项目中为什么要进行日志处理程序出现错误时、快速定位位置sout/serr本身时IO操作,会影响系统性能,日志的打印级别可以控制。Spring Boot 默认打印日志的级别是INFO级别。优先级从高到低分别是ERROR、WARN、INFO、DEBUG二、日志需要记录的内容请求URL服务IP调用方法请求参数返回内容等三、使用在关键结点
在咱们开发的项目中,有人操作系统的时候需要记录操作人在该系统做了哪些操作,最原始的方式就是在每个需要记录的方法最后写插入日志的方法。首先他是可以实现我们的需求。但是有两个劣势:1、书写的代码比较多。每个方法都需要写插入日志的方法。都需要我们去new 对象。2、写上的代码维护起来比较麻烦。修改一个日志类属性,每个方法都需要修改。现在我们使用Spring 他的一个特性有一个是aop。下面来自百度引用:
spring的aop功能可以在尽量减少代码侵入的情况下对原有的功能进行扩展和监控,用来做日志是最适合不过的了。开发web服务器时需要记录用户的访问和返回信息的日志,因为需求较晚,原有服务代码较多,懒得修改,所以就想起了spring框架的aop功能来实现一个监控日志。服务器使用框架:spring boot+mongodb,使用gradle构建要使用aop功能,需要添加依赖:"org.springfr
转载
2023-07-13 23:16:44
65阅读
springAOP一 spring的概念的介绍AOP: 全称是 Aspect Oriented programming 即: 面向切面编程.简单的说:就是我们需要在很多功能上加上一段相同的新的代码或功能,我们可以使用spring帮我们封装的动态代理技术去实现.AOP的作用、优势、实现方式作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强优势:减少重复代码,提高开发效率,并且便于维护 实现
使用AOP(面向切面编程)可以将横切关注点(如日志记录、事务管理、安全性检查等)从主要业务逻辑中分离出来,提供了一种模块化和可重用的方式来处理横切关注点。然而,每个方法都应用AOP可能会对性能产生一定的影响。当在每个方法上应用AOP时,AOP框架需要在每次方法调用时执行相应的切面逻辑,这可能会导致一些额外的开销和性能损失。具体的影响取决于AOP框架的实现和应用的规模。以下是一些可能影响AOP性能的
转载
2023-09-22 22:02:00
67阅读
最近公司上了一个大项目,在上线前进行了3周的全链路压测,总结了不少优化点,这里列举一些,以供大家参考 1、统一日志处理的aop拦截冗余 在拦截aop时pointCut配置,将con
下面将实现日志的查看,通知的记录工能。使用技术:SM+SERVLET1.创建日志实体类import java.util.Date;
public class Log {
private Date oprTime; //操作时间
private String type;//系统日志,登录日志,操作日志
private String operator;//操作人员
p
转载
2023-07-11 18:02:18
97阅读
利用Spring AOP实现业务和异常日志记录AOP是面向切面编程,利用这个技术可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分的耦合性降低,提高代码的可重用性,同时提高开发效率(来自百度百科)。实际上这个确实非常好用。最近碰到一个问题,就是发现以前action中的日志记录的不够完善,需要在所有action中的每个接口改下调用日志的方法,这种工作量太大而且毫无意义,因此就想到用AOP。(
业务需求一般项目进入生产环境后,为了对系统进行监控,我们需要在业务逻辑里增加日志记录功能。 虽然这个需求很明确,但是要以面向对象的方式实现,并集成到整个系统中去,就需要每个业务对象都单独加入日志记录,这个需求的代码就会遍及所有业务对象。
加入各种系统需求后的系统模块关系示意图
那么,如何以一种更优雅的方式来解决这个需求呢? 这里就需要使用到AOP。 初
文章目录AOP简介AOP实现原理AOP相关概念Aspect(切面)Joint point(连接点)Pointcut(切点)Advice(增强)Target(目标对象)Weaving(织入)AOP常用注解Springboot整合AOP实例一(execution表达式)1.导入依赖2.创建一个UserService及其实现3.创建一个切面类4.测试实例二 (@annotation方式)1.声明一个自
转载
2023-07-03 20:07:10
105阅读
在之前的几篇文章中我们介绍了Spring框架中的IoC容器,这是Spring框架的核心之一。接下来我们将要介绍Spring框架中另一个核心内容——AOP,本文将介绍什么是AOP、AOP的作用以及Spring框架中AOP的理论内容。一、AOP概述1、什么是AOPAOP(Aspect Oriented Programming,面向切面编程)是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种
转载
2023-07-11 19:31:19
62阅读
一、前言1. AOP简介AOP (Aspect Orient Programming)面向切面编程,是Spring的两大核心功能之一,另一个是IOC(控制反转)。AOP的思想是将项目中重复的代码抽取来,使用动态代理技术,对已有的方法进行增强,常见的使用场景有:日志记录、事务处理、权限验证、性能检测。2.关于代理关于代理:SpringAOP是基于动态代理实现的,如果要代理的类实现了某个接口,那么AO