- 浏览: 447659 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
建悦胡:
好文,必须顶
关于系统中使用多个PropertyPlaceholderConfigurer的配置 -
阿毛色色:
感谢!解决问题
关于系统中使用多个PropertyPlaceholderConfigurer的配置 -
fangwei06056115:
...
Maven中指定得AspectJ依赖无法添加得解决方案 -
abc3720:
Dashboard配置系统 是是商业的吗?如果不是发我看一下吗 ...
图示ExtJS商业智能的仪表盘配置系统 - (Season 1) -
maidou80:
的确有帮助 3Q
Ext表单中的combobox回填显示值问题
注释形式的AOP编程,便利的实现了运行时对类及其方法的监控及干预,使生活变得更美好。 —— 《Seraph川上曰》
环境 :系统开发过程中,我们都曾实现过将系统元数据或字典表添加到缓存中,以便程序调用,减少数据库访问IO。
问题 :在用户通过前端页面更新系统字典表时,需手工刷新系统缓存,操作很不友好。
解决方案 :监听持久层DAO方法的调用,对于目标表的insert,update,delete操作进行相应的系统缓存更新。
示例环境 :Spring2.5 + iBatis + AspectJ
参考书目 :Spring 2.5 Aspect-Oriented Programming
Spring AOP自动代理的XML配置
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy/> </beans>
被监测类的代码:
public interface ScDbInfoDAO { BigDecimal insert(ScDbInfo record); int updateByPrimaryKey(ScDbInfo record); int updateByPrimaryKeySelective(ScDbInfo record); List selectByExample(ScDbInfoExample example, String orderByClause); List selectByExample(ScDbInfoExample example); ScDbInfo selectByPrimaryKey(BigDecimal dbId); int deleteByExample(ScDbInfoExample example); int deleteByPrimaryKey(BigDecimal dbId); int selectCountByExample(ScDbInfoExample example); }
然后是AspectJ实现:
import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Service; /** * @author seraph * */ @Service @Aspect public class JdbcSourceInterceptor { private static final Logger log = Logger.getLogger(JdbcSourceInterceptor.class); @AfterReturning(value="execution(* com.longtop.data.switching.db.dao.ScDbInfoDAO.*(..))", argNames="rtv", returning="rtv") public void afterInsertMethod(JoinPoint jp, Object rtv) throws Throwable { Signature signature = jp.getSignature(); log.debug("DeclaringType:" + signature.getDeclaringType()); log.debug("DeclaringTypeName:" + signature.getDeclaringTypeName()); log.debug("Modifiers:" + signature.getModifiers()); log.debug("Name:" + signature.getName()); log.debug("LongString:" + signature.toLongString()); log.debug("ShortString:" + signature.toShortString()); for (int i = 0; i < jp.getArgs().length; i++) { Object arg = jp.getArgs()[i]; if(null != arg) { log.debug("Args:" + arg.toString()); } } log.debug("Return:" + rtv); } }
运行时的监测日志:
JdbcSourceInterceptor - DeclaringType:class dao.impl.ScDbInfoDAOImpl JdbcSourceInterceptor - DeclaringTypeName:dao.impl.ScDbInfoDAOImpl JdbcSourceInterceptor - Modifiers:1 JdbcSourceInterceptor - Name:selectByPrimaryKey JdbcSourceInterceptor - LongString:ScDbInfoDAOImpl.selectByPrimaryKey(BigDecimal) JdbcSourceInterceptor - ShortString:selectByPrimaryKey JdbcSourceInterceptor - Args:1 JdbcSourceInterceptor - Return:ScDbInfo: [dbId=1, dbName=oracle, dbDesc=oracle驱动, dbType=2, dbIp=10.1.7.19, dbPortNo=1521, dbInstName=dc, dbUserName=cgst, dbPwd=cgst, maxConnNum=100, minConnNum=20, initConnNum=26]
通过以上的日志我们可以看出,@AfterReturning注释AOP中,通过JoinPoint和返回参数我们可以得到类运行时的所有相关信息,如通过方法名我们可以鉴别出是insert, update还是delete操作,针对不同的操作实现不同的处理方法,如调用缓存的add(),remove(),refresh()方法。我们还可以获取方法的调用参数及返回值,这极大的方便了我们对原业务逻辑的AOP处理。
一些相关概念:
- Aspect - 切面
- Pointcut - 切入点
- Joinpoint - 连接点
- Pointcut Designators (PCD)
Spring AOP中, 切入点(Pointcut)注释符在使用execution方法时以下的连接点(joinpoint)是可用的。
• execution
• within
• this
• target
• args
• @target
• @args
• @within
• @annotation
• bean
以下的切入点(pointcut)仅支持基于XML的Spring AOP配置,不支持AspectJ注释形式。如使用将会导致IllegalArgumentException异常。他们是:
• call
• get
• set
• preinitialization
• staticinitialization
• initialization
• handler
• adviceexecution
• withincode
• cflow
• cflowbelow
• if
• @this
• @withincode
发表评论
-
System.getProperty()系统参数
2011-09-21 13:17 1198Properties props=System.ge ... -
jchardet字符编码自动检测工具
2011-04-08 11:25 2087jchardet is a java port of the ... -
Spring3注释装配的最佳实践
2011-01-31 12:43 25772005夏于上海,初次使用了Spring框架开发企业应用,当时 ... -
Maven中指定得AspectJ依赖无法添加得解决方案
2011-01-30 17:30 9009使用Maven长久以来一直遇到这样得一个问题,就是pom文件中 ... -
Eclipse自动注释模版
2010-12-12 22:00 1100/** * 类说明:<br> ... -
数据仓库学习网站及图书
2010-09-08 15:28 1560Web Sites Archit ... -
获取中文字符数
2010-06-22 12:03 0private boolean isChineseWo ... -
LoadProperties
2010-06-22 10:36 0import java.io.FileNotFoundE ... -
晒书名:已收藏O'Reilly出版社‘动物世界’系列图书(二)
2010-04-01 15:30 1551书接上回,下所列为后23部经典动物书,书目及图片 ... -
晒书名:已收藏O'Reilly出版社‘动物世界’系列图书(一)
2010-04-01 15:17 4283引言:)子在川上,曾经曰:逝者如斯夫,不舍昼夜。恩,眼一睁一闭 ... -
Log4j异步日志简明配制
2009-11-10 20:15 3857最近搭建一个新的WebService工程,感觉日志系统有些慢, ... -
Mac下的Eclipse3.4反编译插件
2009-09-17 10:26 3468Mac的朋友如最近在使用eclipse3.4以上版本做开发,对 ... -
iBatis的SqlMap简化
2009-09-02 11:54 0啊 -
Jetty嵌入式服务器的JNDI快速配置指南
2009-07-30 15:02 6215J etty提供HTTP服务器、客户端,它是javax ... -
关于系统中使用多个PropertyPlaceholderConfigurer的配置
2009-07-29 11:51 24458多数的鲜为人知方法都是因为有着罕见的应用,就比如说Spring ... -
Abator正式更名为Ibator
2009-06-26 17:57 1083好久没有使用Ibatis了,今天使用Ibatis的生成器Aba ... -
倒排索引,反向索引-Inverted index
2009-05-04 11:17 2330倒排索引(英语:Inverted index),也常被称为 ... -
晒书名:已收藏Manning出版社In Action系列图书
2009-04-22 16:39 4844引言:-) 曾几何时俺还在上海学习、生活、工作,欣赏着外滩的美 ... -
Run to create a run-able Java Package?
2008-10-24 12:33 1204怎样创建一个可运行的Java程序包? Manifest-V ... -
Spring中form绑定找不到commandClass问题的解决
2008-08-11 17:18 4088今天在使用<spring:bind>标签绑定表单中 ...
相关推荐
6. **考虑与其他通知类型的结合**:除了@AfterReturning,Spring AOP 还提供了@Before、@Around、@After 和@AfterThrowing 等通知类型,可以根据需求灵活选择和组合使用。 通过遵循这些最佳实践,你可以有效地利用 ...
使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义不同类型的通知,例如: ```java @After("serviceMethods()") public void logAfterServiceMethod() { System.out.println("服务...
在压缩包文件"spring-aop-aspectj"中,可能包含了关于Spring AOP和@AspectJ的示例代码或文档,可以帮助你进一步理解和实践这些知识。通过学习和实践,你将能更好地掌握这一强大的工具,从而在你的IT职业生涯中征服...
在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)...在压缩包文件`Spring3Example`中,可能包含了一些关于Spring AOP和AspectJ注解的示例代码,这将有助于进一步理解和实践这些概念。
这篇博客“Spring AOP + AspectJ in XML配置示例”旨在指导开发者如何在XML配置中实现Spring AOP和AspectJ的结合。 首先,我们需要理解AOP的基本概念。AOP通过将关注点(如日志、事务管理)与业务逻辑分离,提高了...
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
4. **@AfterReturning**:返回后通知,当目标方法正常返回时被调用。 5. **@AfterThrowing**:异常后通知,当目标方法抛出异常时被调用。 6. **@Around**:环绕通知,提供最全面的控制,可以决定目标方法是否执行...
Spring AOP的AspectJ支持jar包; 包括: com.springsource.net.sf.cglib-2.2.0.jar com.srpingsource.org.aopalliance-1.0.0.jar com.srpingsource.org.aspectj.weaver-1.68.RELEASE.jar
**Spring AOP与@AspectJ配置详解** Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它提供了一种模块化和声明式的方式来处理应用程序中的横切关注点,如日志、事务管理等。在传统的面向对象编程中,...
**Spring AOP与AspectJ详解** 在现代软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们分离关注点,将横切关注点(如日志、事务管理、权限控制等)与核心业务...
本篇内容将对Spring AOP中基于AspectJ注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ注解在Spring AOP中的核心概念: 1. **@Aspect**: 这个注解用于定义一个类为切面,这个类将包含切点和...
而基于 AspectJ 的方式则更为强大,它允许开发者使用 AspectJ 的语言特性(如 @Aspect、@Before、@After 等)来编写切面,提供了更直观和灵活的 AOP 解决方案。 本示例将重点介绍如何使用 AspectJ 进行 AOP 演示。...
在切面类中,我们可以定义通知方法,这些方法通过其他注解(如`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`, `@Around`)来标识它们的类型。 4. **定义切入点**:每个通知方法都与一个切入点表达式...
- **@Before、@After、@Around、@AfterThrowing、@AfterReturning**:分别表示各种类型的通知。 - **@Autowired**:在切面中注入需要的服务或依赖。 - **<aop:aspectj-autoproxy/>**:在Spring配置文件中启用...
Spring AOP的实现主要有两种方式:一种是基于代理的AOP(Proxy-based AOP),另一种是基于AspectJ的AOP(AspectJ-based AOP)。基于代理的AOP是Spring默认的方式,它主要通过JDK动态代理或者CGLIB字节码生成技术来...
使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义不同的通知,例如: ```java @AfterReturning("execution(* com.example.service.*.*(..))") public void logAfterServiceCall()...
要实现AfterReturning通知,我们可以使用`@AfterReturning`注解,这是一个Spring AOP的注解驱动方式。 `@AfterReturning`注解有以下几个关键属性: 1. `value`:用于指定切入点表达式,确定哪些方法执行后会触发这...
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
Spring Aop是基于AspectJ实现的面向切面编程(AOP),它提供了一个灵活的方式来实现日志管理。通过使用AspectJ注解,可以轻松地实现日志记录、性能监控、安全检查等功能。 知识点1: AspectJ注解 AspectJ是Java...
主要介绍了 Spring AOP 定义 AfterReturning 增加,结合实例形式分析了 Spring 面相切面 AOP 定义 AfterReturning 增加相关操作技巧与使用注意事项,需要的朋友可以参考下。 标签解释: Spring AOP After...