`
calatustela
  • 浏览: 143997 次
  • 性别: Icon_minigender_1
  • 来自: 江苏●南通
社区版块
存档分类
最新评论

SpringAop在项目中的一些巧妙使用(二)--记录日志

阅读更多

转载自:http://743389831.iteye.com/blog/1755631

在(一)中我们对AOP加动态代理有了初步认识,那如何使用这个记录用户进行了哪些操作呢?我们已经知道,AOP加动态代理我们可以知道用户都做了什么调用了哪些方法。我们也知道这些方法是干嘛用的,难道我们要写一个代码if调用了这个类的某某方法,那么这个用户做了什么什么....这个明显太复杂。如果我们对一些方法加注释,并且能获得这个注释,我们是不是就把问题解决了呢?那怎样的注释是我们代码能获得呢?解决了这个问题就差不多把问题解决了。

     首先你进行注释,使用注解注释,第一步生成注解。

Java代码  收藏代码
  1. package net.zoneland.test.common.dal;  
  2.   
  3. import net.zoneland.test.common.annotation.Log;  
  4.   
  5. /** 
  6.  *  
  7.  * @author wangyong 
  8.  * @version $Id: TestMapper.java, v 0.1 2012-12-27 下午9:13:16 wangyong Exp $ 
  9.  */  
  10. public interface TestMapper {  
  11.   
  12.     @Log(name = "某某的维护或者配置", comments = "更新。。。。")  
  13.     public int updateByPrimaryKey();  
  14.   
  15.     @Log(name = "某某的维护或者配置", comments = "增加。。。。")  
  16.     public void insert();  
  17.   
  18.     @Log(name = "某某的维护或者配置", comments = "删除。。。。")  
  19.     public int deleteByPrimaryKey();  
  20.   
  21. }  

 对方法进行注释:

Java代码  收藏代码
  1. package net.zoneland.test.common.dal;  
  2.   
  3. import net.zoneland.ums.common.util.annotation.Log;  
  4.   
  5. /** 
  6.  *  
  7.  * @author wangyong 
  8.  * @version $Id: TestMapper.java, v 0.1 2012-12-27 下午9:13:16 wangyong Exp $ 
  9.  */  
  10. public interface TestMapper {  
  11.   
  12.     @Log(name = "某某的维护或者配置", comments = "更新。。。。")  
  13.     public int updateByPrimaryKey();  
  14.   
  15.     @Log(name = "某某的维护或者配置", comments = "增加。。。。")  
  16.     public void insert();  
  17.   
  18.     @Log(name = "某某的维护或者配置", comments = "删除。。。。")  
  19.     public int deleteByPrimaryKey();  
  20.   
  21. }  

 然后进行监控操作跟上面记录方法执行时间差不多。

 

Java代码  收藏代码
  1. package net.zoneland.test.common.annotation;  
  2.   
  3. import java.lang.reflect.Method;  
  4.   
  5. import org.apache.log4j.Logger;  
  6. import org.springframework.aop.MethodBeforeAdvice;  
  7.   
  8. /** 
  9.  * 记录日志的方法,与(一)里的记录方法操作时间是一样的,这里是在方法执行前操作。</br> 实现MethodBeforeAdvice 
  10.  *  
  11.  * @author wangyong 
  12.  * @version $Id: LogTraceAdvice.java, v 0.1 2012-9-6 下午7:57:50 wangyong Exp $ 
  13.  */  
  14. public class LogTraceAdvice implements MethodBeforeAdvice {  
  15.   
  16.     private static final Logger logger = Logger.getLogger(LogTraceAdvice.class);  
  17.   
  18.     /** 
  19.      * @see org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method, 
  20.      *      java.lang.Object[], java.lang.Object) 
  21.      */  
  22.     public void before(Method method, Object[] args, Object target)  
  23.             throws Throwable {  
  24.   
  25.         // 获得执行的方法名字  
  26.         String methodName = method.getName();  
  27.         // 检查是否有Log注解,如果没有这个注解就直接返回,有这个注解,进行一下操作。  
  28.         if (!method.isAnnotationPresent(Log.class)) {  
  29.             return;  
  30.         }  
  31.   
  32.         if (methodName.indexOf("update") > -1) {  
  33.             // 获取注解  
  34.             Log log = method.getAnnotation(Log.class);  
  35.             // 执行日志记录  
  36.             if (log != null) {  
  37.                 saveAction("更新", log.name(), log.comments());  
  38.             } else {  
  39.                 saveAction("更新""""");  
  40.             }  
  41.   
  42.         } else if (methodName.indexOf("insert") > -1) {  
  43.             Log log = method.getAnnotation(Log.class);  
  44.             if (log != null) {  
  45.                 saveAction("新增", log.name(), log.comments());  
  46.             } else {  
  47.                 saveAction("新增""""");  
  48.             }  
  49.   
  50.         } else if (methodName.indexOf("del") > -1) {  
  51.             Log log = method.getAnnotation(Log.class);  
  52.             if (log != null) {  
  53.                 saveAction("删除", log.name(), log.comments());  
  54.             } else {  
  55.                 saveAction("删除""""");  
  56.             }  
  57.   
  58.         }  
  59.   
  60.     }  
  61.   
  62.     private void saveAction(String type, String menu, String comments) {  
  63.         logger.info("保存到数据库!" + type + ":" + menu + ":" + comments);  
  64.     }  
  65.   
  66. }  

 配置文件:

 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans  
  7.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.         http://www.springframework.org/schema/context  
  9.         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  10.   
  11.     <bean name="logAdvice" class="net.zoneland.test.common.annotation.LogTraceAdvice"></bean>  
  12.   
  13.     <bean name="logProxy"  
  14.         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  15.         <property name="interceptorNames">  
  16.             <list>  
  17.                 <value>logAdvice</value>  
  18.             </list>  
  19.         </property>  
  20.         <property name="beanNames">  
  21.             <list>  
  22.                 <value>*Mapper</value>  
  23.             </list>  
  24.         </property>  
  25.     </bean>  
  26.   
  27. </beans>  

 日志记录完成!

分享到:
评论

相关推荐

    Spring AOP实战 记录日志 下载可以直接使用

    使用场景及目标: 在生产环境中,通过巧妙的AOP机制,实现对日志的细致记录和处理。我们的目标是提高日志记录的效率和规范性,为监控和故障排查提供更为轻松便捷的工具。 其他说明: 这一方法极为便捷,不仅简化了...

    SystemLog:Spring AOP实现记录系统操作日志

    **Spring AOP 实现系统操作日志记录** 在软件开发中,系统操作日志记录是一项重要的功能,它有助于追踪和调试应用程序的运行过程,尤其是在大型系统中,日志记录能够提供关键信息,帮助开发者理解系统行为,定位...

    com-aop-annotation-permission-demo:源码主要是学习SpringBoot + AOP +注解,通过切面实现日志记录和请求权限校验功能,日志通过logback-spring.xml配置按不同日志级别记录输出到文件,内容包括使用JWT用户令牌验证机制,以及使用Spring Security拦截请求和过虑站点请求,使用Swagger-UI 2.9.2提供API可视化调试操作

    在这个项目中,AOP被用来创建切面,用于记录应用程序的运行时信息,如日志记录和请求处理。开发者可以定义一个切面,然后在特定的“通知”(例如:前置通知、后置通知、异常通知等)中执行自定义逻辑。 二、注解...

    spring-framework-4.3.0.RELEASE(源码已经成功编译)

    深入Spring Framework 4.3.0.RELEASE的源码,我们可以发现它不仅在设计模式上的巧妙应用,如工厂模式、代理模式等,还在性能优化上做了大量工作,如使用缓存减少重复计算、避免反射的开销等。此外,源码中还包含了...

    紫禁城招收太监

    在这个“紫禁城招收太监”的例子中,我们可以想象每个太监对应一个切面,他们的职责(如记录日志、处理异常等)就是切面的增强。当太监(切面)被选中入宫(匹配切点),他们就会在适当的时候(通知)执行自己的任务...

    struts+spring+hibernate俱乐部项目

    在项目实践中,SSH的集成通常涉及以下几个关键步骤: 1. 配置Struts:创建struts.xml文件,定义Action类和结果页面,配置拦截器。 2. 配置Spring:创建spring-context.xml文件,定义Bean,配置数据源、事务管理器,...

    Spring html格式开发手册

    面向切面编程则是Spring处理横切关注点的有效方式,如事务管理、日志记录等。 在源码层面,Spring框架的设计模式和实现细节是开发者需要深入理解的关键点。例如,单例bean的创建、原型bean的生命周期管理,以及AOP...

    学生信息系统(使用了Sturts+Spring+Hibernate技术)

    同时,通过Spring的AOP,我们可以轻松实现日志记录、权限控制等横切关注点。Spring的数据访问层则可以通过其提供的JdbcTemplate或HibernateTemplate,方便地与数据库进行交互。 接下来,Hibernate作为对象关系映射...

    多图详解Spring框架的设计理念与设计模式

    - **定义**:AOP是一种编程范式,用于将横切关注点(如日志记录、安全检查等)从业务逻辑中分离出来。 - **作用**:通过这种方式,可以减少代码重复,提高模块间代码的复用性。 4. **非侵入性**: - **解释**:...

    spring webmvc tx等源码二

    Spring Web MVC 和 Spring TX 是两个在Java开发中广泛使用的框架,它们构成了Spring框架的核心部分。Spring Web MVC 是Spring框架提供的一套用于构建Web应用程序的模型-视图-控制器(MVC)架构,而Spring TX则是...

    OA项目实战,ssh+dwr开发的一个好项目

    在这个项目中,SSH(Struts2、Spring、Hibernate)和DWR(Direct Web Remoting)两大技术框架被巧妙地结合在一起,构建了一个高效、灵活的OA解决方案。 1. SSH框架详解: - Struts2:作为MVC设计模式的实现,...

    基于SpringBoot和SpringCloud实现微服务架构学习(一).docx

    - **Spring Batch**:主要用于批处理场景,提供了任务调度、日志记录等功能。 - **Spring Security**:为企业级应用提供安全控制解决方案。 - **Spring Integration**:面向企业级应用集成的编程框架。 - **Spring ...

    毕业设计基于SSM_Springboot的商城项目.zip

    在这个商城项目中,Spring Boot的自动化配置功能可能已经帮我们处理了数据库连接、日志记录、服务器端点等基础设置,从而让开发者更专注于业务逻辑的实现。 项目中包含的"OnlineSchoolShop-master"文件很可能是项目...

    spring资料1.rar

    Spring的AOP模块提供了声明式事务管理、日志记录、性能监控等功能,这些都是通过切面编程实现的。通过定义切入点(Pointcut)和通知(Advice),我们可以编写出无侵入的代码,专注于业务逻辑,而非繁琐的底层操作。...

    spring开发指南

    - **面向切面编程(AOP)**:Spring框架支持面向切面编程,允许将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,以声明式的方式进行管理。 - **持久层支持**:Spring提供了多种持久层支持,包括JDBC、...

    java + ssh项目 管理系统

    在这个管理系统中,我们可以看到SSH框架的强大功能如何被巧妙地融合,以实现高效的数据操作和用户交互。 首先,Spring框架是整个应用的中枢神经系统,它负责依赖注入(Dependency Injection,DI)和面向切面编程...

    springmvc_spring_hiberate

    此外,Spring还提供了AOP(面向切面编程)功能,可以方便地实现日志记录、事务管理等功能,增强了代码的可维护性。 3. Hibernate:Hibernate是Java世界中的ORM框架,它将Java对象与数据库表进行映射,使得开发者...

    超市管理系统示例项目

    例如,使用Spring AOP实现性能监控,通过Struts2的拦截器进行权限控制,以及利用Hibernate的二级缓存提高数据访问速度。这个超市管理系统示例项目虽然未完成,但它为我们提供了一个学习和实践SSH框架的好平台,有助...

    2024博客系统(struts+hibernate+spring)130225.rar

    同时,Spring的AOP功能可以方便地实现日志记录、权限控制等横切关注点,使得代码更加简洁。 **整合与协作** 在"2024博客系统"中,Struts、Hibernate和Spring的整合主要体现在以下几个方面: - **控制反转与依赖...

    基于Spring+hibernate+mysql+rmi+swing的登录Demo

    在登录Demo中,Spring负责管理各个组件的生命周期,如数据库连接、事务管理等,同时通过AOP实现跨切面的功能,如日志记录和安全控制。 其次,Hibernate作为持久化层的首选,它简化了Java对象与数据库表之间的映射...

Global site tag (gtag.js) - Google Analytics