困扰了两天的Spring Aop+log4j动态日志Demo.
实现的功能:SSH框架,对Action/Service/Dao 三层的方法使用Spring Aop进行日志的添加(排除Action内的set get方法等)
遇到的问题:
Action层使用Spring Aop添加日志后,竟然获取不到前台提交的参数(就是这个问题困扰了太久,其它很 简单,service dao层的方法 都能正常)
问题解决方案以及注意事项
1).将Aop配置为 proxy-target-class="true"(基于类的代理)
2).若设置 proxy-target-class="true",需要导入cglib相关包, 但不要导入cglib jar包,而应该使用cglib-nodep jar包, 譬如我用的是 cglib-nodep-2.2.3.jar. 用cglib jar包,会报异常: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
3).Struts2的action 需交给Spring容器去管理
相关的代码
1.Log类
package com.miao.log; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class MyLog { Logger logger = Logger.getLogger(MyLog.class); String logStr = null ; /** * 前置通知:在某连接点之前执行的通知,但这个通知不能阻止连接点前的执行 */ public void doBefore(JoinPoint jp) { logStr = jp.getTarget().getClass().getName() + " 类的 " + jp.getSignature().getName()+" 方法开始执行 ***Start***"; logger.info(logStr); } /** * 环绕通知:包围一个连接点的通知,可以在方法的调用前后完成自定义的行为,也可以选择不执行 */ public Object doAround(ProceedingJoinPoint pjp) throws Throwable { Object result=null; try{ result = pjp.proceed(); }catch(Exception e){ logStr = "方法:"+pjp.getTarget().getClass() + "." + pjp.getSignature().getName()+ "() "; logStr = logStr+"错误信息如下:["+e+"]"; logger.info(logStr); } return result; } /** * 后置通知 */ public void doAfter(JoinPoint jp) { logStr =jp.getTarget().getClass().getName() + " 类的 " + jp.getSignature().getName() +" 方法执行结束 ***End***"; logger.info(logStr); } }
2.Spring Aop日志相关配置
<!-- 配置日志 使用Aop 记录日志 注意: 1). 此处proxy-target-class="true" 否则Action内的参数会被拦截掉,导致action内无法获得前台传递的参数 2). Action需交给spring容器去管理 --> <aop:config expose-proxy="true" proxy-target-class="true"> <aop:aspect id="aopRiZhiAspect" ref="myRiZhi"> <!-- 对哪些方法进行日志记录, 此处屏蔽action内的set get方法 --> <aop:pointcut id="aopRiZhi" expression="(execution(* com.miao.*.*.*.*(..)) ) and (!execution(* com.miao.*.action.*.set*(..)) ) and (!execution(* com.miao.*.action.*.get*(..)) )" /> <aop:before pointcut-ref="aopRiZhi" method="doBefore"/> <aop:after pointcut-ref="aopRiZhi" method="doAfter"/> <aop:around pointcut-ref="aopRiZhi" method="doAround"/> </aop:aspect> </aop:config> <beans> <bean id="myRiZhi" class="com.miao.log.MyLog"></bean> <!-- Aop日志类 --> <bean id="logonAction" class="com.miao.logon.action.LogonAction" scope="prototype" ></bean> <!-- 要使用spring aop记录日志的action 需要交给spring容器来管理 --> </beans>
3.log4j配置, Struts配置等略, 注意需要的jar包即可,附件是去掉jar包后的项目
相关推荐
标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...
综上所述,"spring简单注解+log4j记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...
这是一个基于Java技术栈的Web应用示例项目,主要采用了Spring、SpringMVC、MyBatis、Log4j和SpringTest等组件。以下是这些技术及其在项目中的应用详解: 1. **Spring**:Spring是一个全面的Java企业级应用开发框架...
本文将深入探讨这些框架的集成以及log4j日志系统的应用。 首先,Spring框架作为核心,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,有助于简化应用的...
在这个例子中,我们将讨论如何将Log4j与Spring MVC和AOP结合,实现方法调用前后的日志打印。 首先,让我们了解Log4j的基本配置。Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,定义了日志的级别(如DEBUG...
综上,这个项目涵盖了Spring MVC作为web应用的核心框架,利用MySQL存储和处理数据,Log4j实现日志记录,AOP增强Controller的功能,DRUID作为高效的数据库连接池,以及对旧版浏览器的兼容性处理。对于初学者来说,这...
Spring、Hibernate和Log4j是Java开发中三个非常重要的库,它们各自负责不同的领域,而将它们结合在一起,可以构建出强大的企业级应用系统。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和面向切面...
在实际项目中,开发者可能会将Struts的Action与Spring的Bean集成,通过Spring的AOP实现事务管理和日志记录,使用Hibernate的Session接口执行数据库操作,以及利用Dom4j解析和生成XML文档。这个组合为开发者提供了...
标题 "Spring.net + MVC + EF + EasyUI + Log4net" 涉及到的是一个基于.NET Framework的Web开发框架组合,主要用于构建高效、可扩展的企业级应用。下面将详细介绍这些技术及其相互间的配合。 1. **Spring.NET**:这...
基于Log4j+SpringAOP+Annotation的可注解日志切面组件 使用方式 @Log(logAfter = true, logBefore = true) public returntype methodName(params) 测试类com.liam.aop.aspect.test.AopLogAnnotationTest 测试输出 ...
Struts负责前端的交互逻辑,Hibernate处理数据持久化,Spring作为胶水层整合所有组件并提供事务管理,XDoclet自动化配置减少重复工作,Ant确保构建过程的标准化,而Log4j则提供详细的日志信息,便于问题排查。...
Struts2、Spring、Tiles和Log4j是Java Web开发中的四大核心框架,它们共同构建了一个强大且灵活的基础架构,适用于构建复杂的企业级应用程序。以下将详细解释这四个框架及其在实际开发中的应用。 **Struts2框架**:...
标题“Spring2.0+hibernate3.1+log4j+mysql demo”揭示了一个集成开发环境,其中包含了四个核心的技术组件:Spring框架的2.0版本、Hibernate ORM框架的3.1版本、日志工具log4j以及MySQL数据库。这个组合常用于构建...
在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其重要组成部分,它允许我们分离关注点,尤其是跨切面的系统级服务,如日志、事务管理等。AspectJ是Spring AOP支持的一种强大...
5. Log4j:Log4j是一个日志记录框架,它提供灵活的日志记录控制,可以根据需要调整日志级别,方便调试和问题排查。在项目中,Log4j用于记录应用程序运行过程中的各种信息,包括错误、警告和调试信息,帮助开发者跟踪...
Struts2、Hibernate、Spring、Log4j、Tomcat 和 MySQL 是Java Web开发中的关键组件,它们共同构建了一个高效、可扩展的Web应用程序框架。以下是对这些技术的详细解释: **Struts2**:Struts2是一个基于MVC(Model-...
这个项目使用了Maven进行模块化管理,版本分别对应于Spring 4.0.6、SpringMVC 4.0.6和Mybatis 3.2.7,日志处理则采用了log4j 2.1。下面将详细讲解这些技术及其在项目中的应用。 **Maven多模块项目** Maven是一个...
这是一个基于Java技术栈的Web应用实例,整合了Maven、Spring、SpringMVC、Mybatis、Log4j和EasyUI1.3.2,并且采用了Oracle数据库。让我们逐一解析这些技术及其在项目中的作用。 **Maven**: Maven是一个项目管理和...
8. Log4j:Log4j是一个日志记录框架,提供灵活的日志配置,帮助开发者追踪和分析程序运行中的问题。它可以根据不同级别记录信息,便于调试和故障排查。 这个项目提供的"WizardFirstFrame"可能是项目初始化的框架...