- 浏览: 4402858 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 84095一开始以为Spring下操 ... -
Memcached笔记——(四)应对高并发攻击
2012-09-13 09:48 29065近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意 ... -
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
2012-08-29 18:29 82413不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然 ... -
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
2012-08-29 16:30 157642有日子没写博客了,真的是忙得要疯掉。 完成项目基础架构搭建 ... -
Spring 注解学习手札(八)补遗——@ExceptionHandler
2012-08-17 18:35 84308Spring注解,改变了我的 ... -
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
2012-08-10 21:27 440230最近需要做些接口服务,服务协议定为JSON,为了整合在Spri ... -
征服 Kestrel + XMemcached + Spring TaskExecutor
2012-07-30 14:43 6268上一篇征服 Kestrel + XMemcached只是对Ke ... -
Memcached笔记——(二)XMemcached&Spring集成
2012-04-01 09:55 42414今天研究Memcached的Java的Client,使用XMe ... -
Spring util
2011-02-24 12:02 01,<util:constant/> 取代了之前通 ... -
Spring HttpInvoke实现,以及效率提升!
2010-07-01 17:38 15095最近接手服务器总被人质疑效率问题,说到底是质疑Spring H ... -
Spring 注解学习手札(六) 测试
2010-02-05 16:28 53239既然系统基于注解自成一体,那么基于Spring的测试是否可以依 ... -
Spring 注解学习手札(五) 业务层事务处理
2010-02-04 16:11 25429控制器层、持久层都有 ... -
Spring 注解学习手札(四) 持久层浅析
2010-01-29 11:11 22669今天,我们玩玩数据库,搞搞持久层。不搞太复杂的东西,Sprin ... -
Spring 注解学习手札(三) 表单页面处理
2010-01-26 15:21 40588昨天小歇一天,看着两篇博客迅速飙升的点击率,十分欣慰。今天来研 ... -
Spring 注解学习手札(二) 控制层梳理
2010-01-24 15:53 36643昨天对Spring注解有了一 ... -
Spring 注解学习手札(一) 构建简单Web应用
2010-01-23 13:40 83763近来工作发生了一些变化,有必要学习一下Spring注解了! ... -
征服Spring AOP—— Schema
2008-09-03 17:41 6484自从开始使用Spring,就接触到AOP,但一直未能深入,沉淀 ... -
关于Spring中Commons Validator的使用说明
2008-09-01 09:57 8197关于Spring中Commons Validator的使用说明 ... -
acegi 我该从哪里取到用户的信息
2006-09-21 17:32 5838项目需要 用acegi做为安全屏障,按acegi 1.0.1 ...
相关推荐
本实例将带你深入理解并实践Spring AOP与@AspectJ的结合使用。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、...
**Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。
**Spring AOP与@AspectJ配置详解** Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它提供了一种模块化和声明式的方式来处理应用程序中的横切关注点,如日志、事务管理等。在传统的面向对象编程中,...
本文将深入探讨“Spring AOP——Schema”,这是Spring AOP的一种配置方式,通过XML schema定义切面和通知。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,旨在提高软件的模块化程度,将关注点...
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
**Spring的AOP实例——XML与@AspectJ双版本解析** Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统的交叉关注点,如日志、事务管理等。AOP的核心概念包括切面...
本篇文章将深入探讨如何利用Spring的@AspectJ注解来实现AOP,这是一个入门级别的例子,旨在帮助开发者理解并掌握这一关键特性。 首先,我们要明白什么是AOP。面向切面编程是一种编程范式,它允许程序员定义“切面”...
在Spring Boot框架中,`@DeclareParents`注解是AOP(面向切面编程)的一部分,主要用于实现动态代理。AOP允许我们在不修改原有代码的情况下,通过“切面”来增强或修改程序的行为,这对于日志记录、事务管理等横切...
Spring 提供了两种主要的 AOP 实现方式:基于代理的和基于 AspectJ 的。基于代理的方式是 Spring 默认的实现,它通过 JdkDynamicProxy 或 CGLIB 创建代理对象来实现切面。而基于 AspectJ 的方式则更为强大,它允许...
在Spring中,我们可以使用AspectJ来实现AOP,AspectJ是一个强大的AOP框架,它可以与Spring无缝集成,提供更细粒度的控制。 首先,让我们了解一下AOP中的通知类型: 1. **前置通知**(Before Advice):在目标方法...
Spring AOP 导致@Autowired 依赖注入失败的...Spring AOP 导致@Autowired 依赖注入失败的解决方法有两种:将方法修饰符改为 public 和使用 AspectJ 进行注入。希望本文的内容能够对大家的学习或者工作带来一定的帮助。
上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...
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注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ注解在Spring AOP中的核心概念: 1. **@Aspect**: 这个注解用于定义一个类为切面,这个类将包含切点和...
AspectJ是Spring AOP支持的一种强大的、独立的AOP语言,它提供了注解来简化切面的定义。本篇将深入探讨如何结合Spring AOP和AspectJ注解进行实践。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,...