- 浏览: 4378979 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
接N年前写的一篇Spring AOP相关的内容征服Spring AOP—— Schema,沿用原有例子,将Schema方式转换为@AspectJ方式实现。
注解方式的确更加简洁,由配置优先转为契约优先,还是需要点过程,至少是理解上和心理上!
相关内容:
征服Spring AOP—— Schema
征服Spring AOP—— @AspectJ
先看Spring配置文件:
<aop:aspectj-autoproxy />打开自动代理,proxy-target-class默认"false"使用JDK代理,更改为"ture"使用CGLib动态代理。
org.zlex.aop.AspectJAdvice是在上一篇Advice类的AspectJ注解实现。
逐步解析。。。
@Aspect标注AspectJ的实现类:
先来看BeforeAdvice,实现方法如下:
@Before("execution(* org.zlex.aop.Hello.sayHelloBefore(..))")也可以写成@Before(value="execution(* org.zlex.aop.Hello.sayHelloBefore(..))")。
当执行org.zlex.aop.Hello.sayHelloBefore(..)方法时,将触发beforeAdvice方法。
AfterAdvice和AroundAdvice与之类似,代码如下:
只是这里的AroundAdvice在实现方法时,需要ProceedingJoinPoint作为参数,用于执行环绕方法,并将执行结果返回。
AfterReturningAdvice可以获取目标方法的返回值,代码如下:
@AfterReturning(value = "execution(* org.zlex.aop.Hello.sayHelloAfterReturning(..))", returning = "retVal")中,有一个注解参数returning用于标识返回值参数,与方法中的参数名称保持一致即可。
AfterThrowingAdvice与AfterReturningAdvice类似,可以获得目标对象抛出的异常,代码如下:
这里需要着重说明的是Introduction的注解实现方式,代码如下:
这里的Ok接口,用来扩展原有SayHello。这个成员变量(ok)必须标示为public,即public Ok ok;。
@DeclareParents参数中,defaultImpl指向Ok接口的实现类,value标识目标类。比起Schema的繁杂配置,可谓是一步到位!
这里就不再废话了,代码相见附件!
相关内容:
征服Spring AOP—— Schema
征服Spring AOP—— @AspectJ
注解方式的确更加简洁,由配置优先转为契约优先,还是需要点过程,至少是理解上和心理上!
相关内容:
征服Spring AOP—— Schema
征服Spring AOP—— @AspectJ
先看Spring配置文件:
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" > <!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 --> <aop:aspectj-autoproxy proxy-target-class="true" /> <bean id="hello" class="org.zlex.aop.SayHello" /> <bean class="org.zlex.aop.AspectJAdvice" /> </beans>
<aop:aspectj-autoproxy />打开自动代理,proxy-target-class默认"false"使用JDK代理,更改为"ture"使用CGLib动态代理。
org.zlex.aop.AspectJAdvice是在上一篇Advice类的AspectJ注解实现。
逐步解析。。。
@Aspect标注AspectJ的实现类:
@Aspect public class AspectJAdvice { // ... }
先来看BeforeAdvice,实现方法如下:
/** * @param joinPoint */ @Before("execution(* org.zlex.aop.Hello.sayHelloBefore(..))") public void beforeAdvice(JoinPoint joinPoint) { System.out.println("Before: " + joinPoint.getSignature().getName()); }
@Before("execution(* org.zlex.aop.Hello.sayHelloBefore(..))")也可以写成@Before(value="execution(* org.zlex.aop.Hello.sayHelloBefore(..))")。
当执行org.zlex.aop.Hello.sayHelloBefore(..)方法时,将触发beforeAdvice方法。
AfterAdvice和AroundAdvice与之类似,代码如下:
/** * After * * @param joinPoint */ @After(value = "execution(* org.zlex.aop.Hello.sayHelloAfter(..))") public void afterAdvice(JoinPoint joinPoint) { System.out.println("After: " + joinPoint.getSignature().getName()); } /** * Around * * @param joinPoint * @return * @throws Throwable */ @Around(value = "execution(* org.zlex.aop.Hello.sayHelloAround(..))") public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("Around: " + joinPoint.getSignature().getName()); System.out.println("Before"); Object obj = joinPoint.proceed(); System.out.println("End"); return obj; }
只是这里的AroundAdvice在实现方法时,需要ProceedingJoinPoint作为参数,用于执行环绕方法,并将执行结果返回。
AfterReturningAdvice可以获取目标方法的返回值,代码如下:
/** * AfterReturning * * @param joinPoint */ @AfterReturning(value = "execution(* org.zlex.aop.Hello.sayHelloAfterReturning(..))", returning = "retVal") public void afterReturningAdvice(JoinPoint joinPoint, String retVal) { System.out.println("AfterReturning: " + joinPoint.getSignature().getName()); System.out.println("Return Value: " + retVal); }
@AfterReturning(value = "execution(* org.zlex.aop.Hello.sayHelloAfterReturning(..))", returning = "retVal")中,有一个注解参数returning用于标识返回值参数,与方法中的参数名称保持一致即可。
AfterThrowingAdvice与AfterReturningAdvice类似,可以获得目标对象抛出的异常,代码如下:
/** * AfterThrowing * * @param joinPoint */ @AfterThrowing(value = "execution(* org.zlex.aop.Hello.sayHelloAfterThrowing(..))", throwing = "e") public void afterThrowingAdvice(JoinPoint joinPoint, Exception e) { System.out.println("AfterThrowing: " + joinPoint.getSignature().getName()); System.out.println("Exception Message: " + e.getMessage()); }
这里需要着重说明的是Introduction的注解实现方式,代码如下:
@DeclareParents(value = "org.zlex.aop.SayHello", defaultImpl = org.zlex.aop.IntroductionOk.class) public Ok ok;
这里的Ok接口,用来扩展原有SayHello。这个成员变量(ok)必须标示为public,即public Ok ok;。
@DeclareParents参数中,defaultImpl指向Ok接口的实现类,value标识目标类。比起Schema的繁杂配置,可谓是一步到位!
这里就不再废话了,代码相见附件!
相关内容:
征服Spring AOP—— Schema
征服Spring AOP—— @AspectJ
- spring-aop-aspectj.zip (138.6 KB)
- 下载次数: 344
发表评论
-
征服 Redis + Jedis + Spring (三)—— 列表操作
2013-03-06 16:16 83926一开始以为Spring下操 ... -
Memcached笔记——(四)应对高并发攻击
2012-09-13 09:48 28903近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意 ... -
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
2012-08-29 18:29 82297不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然 ... -
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
2012-08-29 16:30 157421有日子没写博客了,真的是忙得要疯掉。 完成项目基础架构搭建 ... -
Spring 注解学习手札(八)补遗——@ExceptionHandler
2012-08-17 18:35 84079Spring注解,改变了我的 ... -
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
2012-08-10 21:27 439564最近需要做些接口服务,服务协议定为JSON,为了整合在Spri ... -
征服 Kestrel + XMemcached + Spring TaskExecutor
2012-07-30 14:43 6189上一篇征服 Kestrel + XMemcached只是对Ke ... -
Memcached笔记——(二)XMemcached&Spring集成
2012-04-01 09:55 42299今天研究Memcached的Java的Client,使用XMe ... -
Spring util
2011-02-24 12:02 01,<util:constant/> 取代了之前通 ... -
Spring HttpInvoke实现,以及效率提升!
2010-07-01 17:38 15005最近接手服务器总被人质疑效率问题,说到底是质疑Spring H ... -
Spring 注解学习手札(六) 测试
2010-02-05 16:28 53140既然系统基于注解自成一体,那么基于Spring的测试是否可以依 ... -
Spring 注解学习手札(五) 业务层事务处理
2010-02-04 16:11 25329控制器层、持久层都有 ... -
Spring 注解学习手札(四) 持久层浅析
2010-01-29 11:11 22558今天,我们玩玩数据库,搞搞持久层。不搞太复杂的东西,Sprin ... -
Spring 注解学习手札(三) 表单页面处理
2010-01-26 15:21 40467昨天小歇一天,看着两篇博客迅速飙升的点击率,十分欣慰。今天来研 ... -
Spring 注解学习手札(二) 控制层梳理
2010-01-24 15:53 36558昨天对Spring注解有了一 ... -
Spring 注解学习手札(一) 构建简单Web应用
2010-01-23 13:40 83329近来工作发生了一些变化,有必要学习一下Spring注解了! ... -
征服Spring AOP—— Schema
2008-09-03 17:41 6422自从开始使用Spring,就接触到AOP,但一直未能深入,沉淀 ... -
关于Spring中Commons Validator的使用说明
2008-09-01 09:57 8128关于Spring中Commons Validator的使用说明 ... -
acegi 我该从哪里取到用户的信息
2006-09-21 17:32 5769项目需要 用acegi做为安全屏障,按acegi 1.0.1 ...
相关推荐
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
@AspectJ配置Spring AOP,文档,Aspect jar包, 可运行的demo,
NULL 博文链接:https://snowolf.iteye.com/blog/236264
NULL 博文链接:https://rain1109.iteye.com/blog/1838100
NULL 博文链接:https://quicker.iteye.com/blog/670885
Spring AOP之基于AspectJ注解总结与案例 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45394409
上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...
Spring spectJ AOP 前置通知 后置通知 返回通知 异常通知 环绕通知
NULL 博文链接:https://samter.iteye.com/blog/410618
博文链接:https://shaqiang32.iteye.com/blog/201914
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
NULL 博文链接:https://moshow.iteye.com/blog/1613947
在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
下面小编就为大家分享一篇Spring Aop之AspectJ注解配置实现日志管理的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
主要给大家介绍了因Spring AOP导致@Autowired依赖注入失败的解决方法,文中通过示例代码给大家介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
Spring2.5开发 如果我们用到了AOP的话 一定需要aspectjrt.jar + aspectjweaver.jar 两个jar文件 这里面提供了 导入这两个就可以进行AOP开发了