`
kaowww153
  • 浏览: 74549 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

采用spring AOP 和注解解决日志

阅读更多

首先创建一个自定义注解

@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就可以啦

1
0
分享到:
评论
1 楼 squall140 2012-05-03  
做的很不错!值得参考!

相关推荐

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...

    spring AOP 切面日志 分层打日志

    在Spring框架中,AOP(面向切面编程)是一种...通过上述方式,我们可以有效地利用Spring AOP实现分层日志记录,提高代码的可维护性和问题排查效率。同时,合理的日志设计和管理对于任何应用程序来说都是至关重要的。

    spring aop 切面添加日志

    通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    本教程将详细介绍如何利用注解来配置和使用AOP来拦截Controller层的方法,以便记录执行过程中的相关信息,实现日志管理。 一、Spring AOP基础 AOP是Spring框架的核心组件之一,它允许程序员定义“切面”,这些切面...

    spring aop jar 包

    这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...

    spring aop注解版

    总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...

    SpringAOP的注解配置

    在Spring AOP中,我们可以通过注解来定义切面和切入点。以下是一些关键注解: 1. **@Aspect**:标记一个类为切面,其中包含通知和其他切面逻辑。 2. **@Before**:前置通知,方法在目标方法执行前运行。 3. **@...

    spring AOP注解的应用1

    在Spring框架中,AOP(面向切面编程)是一...Spring AOP注解的应用使得切面编程更加简单直观,大大简化了对横切关注点的管理。在实际开发中,结合Spring提供的其他特性,如事务管理,可以构建出高效、健壮的后端系统。

    Spring AOP 16道面试题及答案.docx

    Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....

    spring aop切面拦截指定类和方法实现流程日志跟踪

    本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...

    swagger和spring Aop日志结合

    1. 引入依赖:在项目中添加Swagger和Spring AOP的相关依赖,如`springfox-swagger2`和`springfox-swagger-ui`,以及Spring AOP和日志库(如Logback或Log4j)。 2. 配置Swagger:创建一个配置类,启用Swagger并配置...

    Spring Aop之AspectJ注解配置实现日志管理的方法

    Spring Aop之AspectJ注解配置实现日志管理的方法 Spring Aop是基于AspectJ实现的面向切面编程(AOP),它提供了一个灵活的方式来实现日志管理。通过使用AspectJ注解,可以轻松地实现日志记录、性能监控、安全检查...

    spring aop注解方式、xml方式示例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...

    Spring AOP完整例子

    总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...

    spring-aop和注解的实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来实现横切关注点,如日志、事务管理、性能监控等。这些关注点通常与业务逻辑无关,但又在多个地方被用到,AOP就是为了...

    spring aop 注解例子

    在 Spring AOP 中,我们可以通过注解来简化配置,使得切面的定义更加直观和简洁。本例子就是一个使用 Spring AOP 注解实现的项目,旨在展示如何在简单的环境中应用这一特性。 1. **AOP 基础概念** - **切面...

    spring注解aop配置详解

    通过以上介绍,我们可以看到Spring的注解AOP配置是如何让代码更简洁、更易于理解和维护的。结合实际的项目需求,我们可以灵活地使用这些注解来实现各种企业级功能,如日志、事务控制等,从而提高代码的复用性和模块...

    Spring之AOP在鉴权和日志记录中的应用

    **Spring AOP在鉴权和日志记录中的应用** **一、引言** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改源代码的情况下,对应用程序进行功能增强...

    spring aop实现日志功能

    标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...

Global site tag (gtag.js) - Google Analytics