首先创建一个自定义注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RecordLog {
}
然后采用spring Aop
@Component("logAround")
public class LogAroundInterceptor implements MethodInterceptor {
@Autowired
private SysLogService sysLogService;
private final Logger logger = Logger.getLogger(LogAroundInterceptor.class);
public Object invoke(MethodInvocation invocation) throws Throwable {
// TODO Auto-generated method stub
Object returnObject = invocation.proceed();
Method method = invocation.getMethod();
if (method.isAnnotationPresent(RecordLog.class)) {
Object[] arguments = invocation.getArguments();
Object saveObject = null;
SysLog sysLog = new SysLog();
if (null != arguments) {
saveObject = arguments[0];
sysLog = getSysLog(getOperaType(method.getName()), saveObject);
sysLogService.saveSysLog(sysLog);
}
}
return returnObject;
}
public int getOperaType(String methodName) {
int type = 0;
if (methodName.startsWith("save") || methodName.startsWith("add")
|| methodName.startsWith("insert")
|| methodName.startsWith("update")) {
type = 1;
} else if (methodName.startsWith("delete")
|| methodName.startsWith("del")) {
type = 2;
}
return type;
}
public SysLog getSysLog(int type, Object object) {
SysLog sysLog = new SysLog();
sysLog.setCreateTime(new Date());
StringBuffer sysContent = new StringBuffer();
if (type != 1 && type != 2) {
logger.warn("此方法不能被记录日志");
return null;
}
if (object instanceof User) {
User user = (User) object;
sysContent.append("用户:");
if (type == 1) {
sysContent.append(user.getUsername()).append("被保存.");
} else if (type == 2) {
sysContent.append(user.getDeleteUser()).append(
"删除了用户:" + user.getUniqueUserName());
}
} else if (object instanceof Tribe) {
Tribe tribe = (Tribe) object;
if (type == 1) {
sysContent.append("用户:").append(
tribe.getUser().getUniqueUserName()).append("保存了部落:")
.append(tribe.getName());
} else if (type == 2) {
sysContent.append("用户:").append(tribe.getDeleteUser()).append(
"删除了部落:").append(tribe.getUniqueTribeName());
}
} else if (object instanceof Assessment) {
Assessment assessment = (Assessment) object;
int assType = assessment.getType();
User user = assessment.getUserByUserId();
sysContent.append("用户:").append(user.getUniqueUserName()).append(
"举报了");
if (assType == 1) {
sysContent.append("资源").append(
assessment.getResource().getTitle());
} else if (assType == 2) {
sysContent.append("部落").append(
assessment.getTribeByAccTribeId().getUniqueTribeName());
} else if (assType == 3) {
sysContent.append("人").append(
assessment.getUserByUserId().getUniqueUserName());
}
} else if (object instanceof Role) {
Role role = (Role) object;
sysContent.append("用户:").append(role.getOperaUser());
if (type == 1) {
sysContent.append("保存了").append(role.getRoleName());
} else if (type == 2) {
sysContent.append("删除了").append(role.getRoleName());
}
} else if (object instanceof Resource) {
Resource res = (Resource) object;
boolean isPass = res.getAppStatus() == 1;
sysContent.append("一级审核人员:").append(res.getAppUser().getUniqueUserName());
sysContent.append("审核").append(res.getUniqueResName());
if (!isPass) {
sysContent.append("未通过");
} else if (isPass) {
sysContent.append("通过");
}
}
logger.info(sysContent.toString());
sysLog.setContent(sysContent.toString());
return sysLog;
}
}
在需要插入注解的方法上面写上@RecordLog就可以啦
分享到:
相关推荐
4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...
在Spring框架中,AOP(面向切面编程)是一种...通过上述方式,我们可以有效地利用Spring AOP实现分层日志记录,提高代码的可维护性和问题排查效率。同时,合理的日志设计和管理对于任何应用程序来说都是至关重要的。
通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。
本教程将详细介绍如何利用注解来配置和使用AOP来拦截Controller层的方法,以便记录执行过程中的相关信息,实现日志管理。 一、Spring AOP基础 AOP是Spring框架的核心组件之一,它允许程序员定义“切面”,这些切面...
这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...
总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...
在Spring AOP中,我们可以通过注解来定义切面和切入点。以下是一些关键注解: 1. **@Aspect**:标记一个类为切面,其中包含通知和其他切面逻辑。 2. **@Before**:前置通知,方法在目标方法执行前运行。 3. **@...
在Spring框架中,AOP(面向切面编程)是一...Spring AOP注解的应用使得切面编程更加简单直观,大大简化了对横切关注点的管理。在实际开发中,结合Spring提供的其他特性,如事务管理,可以构建出高效、健壮的后端系统。
Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
1. 引入依赖:在项目中添加Swagger和Spring AOP的相关依赖,如`springfox-swagger2`和`springfox-swagger-ui`,以及Spring AOP和日志库(如Logback或Log4j)。 2. 配置Swagger:创建一个配置类,启用Swagger并配置...
Spring Aop之AspectJ注解配置实现日志管理的方法 Spring Aop是基于AspectJ实现的面向切面编程(AOP),它提供了一个灵活的方式来实现日志管理。通过使用AspectJ注解,可以轻松地实现日志记录、性能监控、安全检查...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...
总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来实现横切关注点,如日志、事务管理、性能监控等。这些关注点通常与业务逻辑无关,但又在多个地方被用到,AOP就是为了...
在 Spring AOP 中,我们可以通过注解来简化配置,使得切面的定义更加直观和简洁。本例子就是一个使用 Spring AOP 注解实现的项目,旨在展示如何在简单的环境中应用这一特性。 1. **AOP 基础概念** - **切面...
通过以上介绍,我们可以看到Spring的注解AOP配置是如何让代码更简洁、更易于理解和维护的。结合实际的项目需求,我们可以灵活地使用这些注解来实现各种企业级功能,如日志、事务控制等,从而提高代码的复用性和模块...
**Spring AOP在鉴权和日志记录中的应用** **一、引言** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改源代码的情况下,对应用程序进行功能增强...
标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...