- 浏览: 1472630 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 1421http://www.html.org.cn/books/sp ... -
相关知识和链接
2011-09-01 15:21 1209《spring攻略》译员博客http://digitalson ... -
spring简述
2011-08-31 16:25 1231背景 Rod Johnson在2002年编著的《Expert ... -
传智播客_spring_PPT_黎活明
2011-08-05 16:44 0传智播客_spring_PPT_黎活明.ppt -
spring 中的singleton和ClassLoader中的单例
2011-08-03 15:50 2504http://www.iteye.com/topic/7186 ... -
Spring AOP原理及拦截器
2011-07-11 14:25 2144原理AOP(Aspect Oriented Progr ... -
Spring AOP: Spring之面向方面编程
2011-07-11 14:12 5905.1. 概念 ... -
AOP
2011-07-11 14:10 1421What is AOP?AOP即Aspect-Orie ... -
Spring的组件自动扫描机制
2011-07-06 10:06 2272Spring将所有的bean都纳入到IOC中创建、管理和维护。 ... -
Spring技术内幕——深入解析Spring架构与设计原理(五)Spring与远端调用
2011-07-04 10:31 1397http://jiwenke.iteye.com/blog/5 ... -
Spring事物笔记
2011-06-14 23:01 1761/**什么异常时才回滚**/ Spring事务策略由Pl ... -
Spring in Action 学习笔记—第六章 远程调用
2010-12-24 10:09 1780远程调用是客户端应用 ... -
浅谈Spring事务隔离级别
2010-11-02 16:05 1155本文将介绍Spring事务隔 ... -
Spring事务的传播行为和隔离级别
2010-11-02 15:51 1368Spring中事务的定义:一、Propagation : ... -
Spring中单例bean访问非单例bean的第一种方式:方法注入
2010-07-08 15:20 2726方法注入在Spring中是很少用的,主要应用是, ... -
关于spring声明式事务管理异常处理的测试和小结
2010-07-08 10:51 1295关于spring事务管理以及异常处理的帖子,本论坛争论颇多,各 ... -
Spring源代码解析(一):IOC容器(1)
2010-07-01 11:00 1205ss -
spring ApplicationContext的实现
2010-07-01 10:37 1486spring为ApplicationContext提供的3 ... -
使用web.xml方式加载Spring时,获取Spring context的两种方式:
2010-06-25 14:10 15991、servlet方式加载时: 【web .xml】 ... -
Spring 框架的设计理念与设计模式分析(2)
2010-06-18 09:59 1592如何创建 Bean 实例并构建 Bean 的关系网 下面 ...
相关推荐
Spring,面向切面编程AOP例子!AOP(Aspect Oriented Programming)!
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
16.2 Spring框架-AOP面向切面编程
NULL 博文链接:https://zyssnh.iteye.com/blog/1866867
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
AOP 的全称是“Aspect Oriented Programming”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。AOP 采取横向抽取机制,取代了传统纵向继承...
该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...
2、面向切面编程AOP 在实现过程中,我尽量贴近实际开发与场景,麻雀虽小,五脏俱全,个人感觉这个项目是web框架搭建的一个极简之道实践。 项目中可能还存在很多的问题,希望大家不吝赐教,谢谢。
AOP(Aspect Oriented Programming):面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是对OOP的补充,是软件开发中的一个热点,也是Spring框架中的一个重要内容。 利用AOP...
NULL 博文链接:https://countme.iteye.com/blog/1132555
SpringAop面向切面编程
SpringBoot之AOP面向切面编程实例
Spring框架资料,Ioc容器, AOP面向切面编程 ,声明式事务 ,Spring5新特性
NULL 博文链接:https://zw7534313.iteye.com/blog/2221200
写了SpringAop的两种代理的实现,jdk动态代理和cglib代理的代码,及测试。
主要介绍了Spring AOP面向切面编程实现原理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
深入讲解Spring应用中重要的一部分AOP--面向切面编程