- 浏览: 1504877 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
这个东西怎么做:spring aop 面向切面编程 如何来做一个强大的日志记录功能模板;
昨天经理把这个任务交给我,让我为公司现在的项目加上一个详细的日志记录功能模板,对所有的操作,至少是增删改运作进行一个记录,其要记录操作者,以及执行的方法,IP,以及操作的方法的参数.
我以前做过类似的功能,不过是在filter里做的,通过filter来检查action请求,记录请求中的参数及action名字.但是今天公司这个是要求用spring aop来做,这样就可以在spring里对要进行的日志记录方法进行一个配置.而且这样也就可以无缝集成到现有的系统中去了.
不过,很郁闷的是,我还没用这样做过,或者类似的功能.
==========================
哈哈,很爽,居然让我做好了.
其实也很简单,使用AOP的@AspectJ来做就可以了,方法步骤如下:
第一:>>在spring的配置文件里增加以下配置
<!-- 支持 @AspectJ 标记-->
<aop:aspectj-autoproxy />
如果发现插入后,eclipse提示这行有错误,那可能是你的spring配置有问题,你对照一下我的spring里的beans的头:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
default-autowire="byName" default-lazy-init="true">
关于spring和AOP及@aspectj配置可以参考一下我收藏的以下文章
基于@AspectJ配置Spring AOP之一==>http://www.busfly.cn/csdn/post/700.html
Spring 2.0的新特性之@AspectJ==>http://www.busfly.cn/csdn/post/699.html
AspectJ如何实现AOP==>http://www.busfly.cn/csdn/post/698.html
Spring 2.0中的AOP实现-aspectj-Advice==>http://www.busfly.cn/csdn/post/693.html
第二:>>配置一下@AspectJ 的bean,这个Bean就是一个普通的java对象bean,按照普通的bean来配置就行了,我的这个处理切面的bean配置如下 (包含了第一步的配置):
<!-- 支持 @AspectJ 标记-->
<aop:aspectj-autoproxy />
<bean id="logAspect" class="com.hs.dolphin.sys.LogAspect">
<!-- 配置要记录日志的对象及属性(要监控的方法的第一个参数) 格式: 对象类名(带路径全称).属性GET方法名 -->
<property name="obj_method">
<map>
<entry key="default">
<map><!-- 默认值,如果没有指定对象就执行这个 -->
<entry key="getId"><!-- 属性的get方法名字 -->
<value>id</value><!-- 属性名字 -->
</entry>
</map>
</entry>
<entry key="com.hs.dolphin.domain.User">
<map>
<entry key="getId"><!-- 属性的get方法名字 -->
<value>id</value><!-- 属性名字 -->
</entry>
<entry key="getUserName"><!-- 属性的get方法名字 -->
<value>userName</value><!-- 属性名字 -->
</entry>
</map>
</entry>
</map>
</property>
</bean>
第三:>>在这个切点处理bean类里,在class定义的上一行加上切面定义标签,如下:
@Aspect
// 切面定义标签
public class LogAspect {
private UserSession sessionValue; // 当前操作员基本信息
private String userIpAddress; // 当前操作员IP地址
第四:>>定义切点及处理方法
@Pointcut("execution(* *.*.*.service..*.insert*(..)) || execution(* *.*.*.service..*.update*(..)) "
+ "|| execution(* *.*.*.service..*.remove*(..))"
+ "|| execution(* *.*.*.service..*.delete*(..))")
public void insertPointcut() {
}
可以在@Pointcut定义下面的这个函数里写上要处理的代码,也可以进行更多更多大的扩展,我的项目里就是做了扩展处理,在上面这个函数里没添加任何方法处理,而是在后面扩展,也就是所谓的Advice吧,请看下一步
第五:>>Advice扩展处理
@AfterReturning("insertPointcut()")
public void insertLogInfo(JoinPoint joinPoint)
throws Exception{
/*处理代码,略*/
}
=====================================
好了,完成了,是不是很容易.在第五步的这个方法里有一个参数,这个参数也许就是切面自己传进来的,所以你就这样写吧,JoinPoint 对象里可以获取切面切点的相关信息,如方法名,参数,类路径,类名等等,这样我们就可以来记录操作者进行的操作的详细信息,比如执行的方法名,其所在的对象类名,操作方法里带的所有参数信息,等,再加上自己另外获取一些信息,比如,当前操作时间,操作用户,还可以根据以上信息来定义操作类别等等
本文里源码下载,只是关键的一个spring配置文件和那个bean,其它的文件没上传上来.转载者请将附件上传到你的服务器上http://tech.ddvip.com/2008-10/122360755276144_3.html
发表评论
-
Spring Framework 开发参考手册
2011-09-02 16:15 1464http://www.html.org.cn/books/sp ... -
相关知识和链接
2011-09-01 15:21 1252《spring攻略》译员博客http://digitalson ... -
spring简述
2011-08-31 16:25 1263背景 Rod Johnson在2002年编著的《Expert ... -
传智播客_spring_PPT_黎活明
2011-08-05 16:44 0传智播客_spring_PPT_黎活明.ppt -
spring 中的singleton和ClassLoader中的单例
2011-08-03 15:50 2537http://www.iteye.com/topic/7186 ... -
Spring AOP原理及拦截器
2011-07-11 14:25 2181原理AOP(Aspect Oriented Progr ... -
Spring AOP: Spring之面向方面编程
2011-07-11 14:12 6235.1. 概念 ... -
AOP
2011-07-11 14:10 1453What is AOP?AOP即Aspect-Orie ... -
Spring的组件自动扫描机制
2011-07-06 10:06 2404Spring将所有的bean都纳入到IOC中创建、管理和维护。 ... -
Spring技术内幕——深入解析Spring架构与设计原理(五)Spring与远端调用
2011-07-04 10:31 1437http://jiwenke.iteye.com/blog/5 ... -
Spring事物笔记
2011-06-14 23:01 1797/**什么异常时才回滚**/ Spring事务策略由Pl ... -
Spring in Action 学习笔记—第六章 远程调用
2010-12-24 10:09 1808远程调用是客户端应用 ... -
浅谈Spring事务隔离级别
2010-11-02 16:05 1186本文将介绍Spring事务隔 ... -
Spring事务的传播行为和隔离级别
2010-11-02 15:51 1408Spring中事务的定义:一、Propagation : ... -
Spring中单例bean访问非单例bean的第一种方式:方法注入
2010-07-08 15:20 2767方法注入在Spring中是很少用的,主要应用是, ... -
关于spring声明式事务管理异常处理的测试和小结
2010-07-08 10:51 1337关于spring事务管理以及异常处理的帖子,本论坛争论颇多,各 ... -
Spring源代码解析(一):IOC容器(1)
2010-07-01 11:00 1250ss -
spring ApplicationContext的实现
2010-07-01 10:37 1529spring为ApplicationContext提供的3 ... -
使用web.xml方式加载Spring时,获取Spring context的两种方式:
2010-06-25 14:10 16301、servlet方式加载时: 【web .xml】 ... -
Spring 框架的设计理念与设计模式分析(2)
2010-06-18 09:59 1626如何创建 Bean 实例并构建 Bean 的关系网 下面 ...
相关推荐
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
JAVA Spring AOP面向切面编程笔记
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...
面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...
在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...
这个“spring-aop面向切面系统日志案例”是一个实践教程,旨在教你如何利用Spring AOP实现系统的日志记录。 首先,理解Spring AOP的基本概念至关重要。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以...
Spring4AOP 面向切面编程实例之方法拦截实例 一下利用Spring4的最后一个版本Spring4.3.9,实现简单的方法拦截实例。 Eclipse 建立java工程,导入必要的jar包,工程目录如下:
学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...
Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。面向切面编程(Aspect Oriented Programming,AOP)的核心思想是将关注...
在IT行业中,Spring MVC、MyBatis Plus以及AOP(面向切面编程)是Java Web开发中的重要组件,常用于构建高效、灵活的企业级应用。本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序的关键行为进行增强或监控。本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,易于维护和扩展。在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横...
在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...