基于@AspectJ配置Spring AOP之一
在低版本Spring中定义一个切面是比较麻烦的,需要实现特定的接口,并进行一些较为复杂的配置,低版本Spring AOP的配置是被批评最多的地方。Spring听取这方面的批评声音,并下决心彻底改变这一现状。在Spring2.0中,Spring AOP已经焕然一新,你可以使用@AspectJ注解非常容易的定义一个切面,不需要实现任何的接口。 Spring2.0采用@AspectJ注解对POJO进行标注,从而定义一个包含切点信息和增强横切逻辑的切面,Spring 2.0可以将这个切面织入到匹配的目标Bean中。@AspectJ注解使用AspectJ切点表达式语法进行切点定义,可以通过切点函数、运算符、通配符等高级功能进行切点定义,拥有强大的连接点描述能力。在你学习基于@AspectJ的切面技术后,恐怕你就再也没有兴趣使用低版本Spring AOP的实现技术了,毕竟马落桃花马前雪,两者的易用性、便捷性是不可同日而语的。 着手使用@AspectJ 我们知道在低版本的Spring AOP中,你必须使用Pointcut和Advice接口描述切点和增强,并用Advisor组合两者描述一个切面,@AspectJ则采用JDK 5.0的注解技术描述切点和增强类型,而增强的横切逻辑就在被标注的POJO中定义。 使用前的准备
Tags: aspectj  Spring  aop  
Spring 2.0的新特性之@AspectJ
本文结合Spring 2.0开发参考手册来讲解。对于手册中有的东西我就不说了,其实这样的话也剩下不了多少我能说的了,我只是谈一下我在看手册的时候比较费劲的地方和我对这些地方的理解。 首先@AspectJ并不是AspectJ,Spring AOP 框架支持@AspectJ只是说Spring支持用AspectJ注解的方式配置AOP。当然了,Spring 2.0也支持纯的AspectJ的应用,但这个不在本文的范围之内。 Spring 2.0开发参考手册的<6.2.>部分的内容是关于@AspectJ的。你可以看Springframework.org上的英文文档,这样你可以看到最最新的东西。蛙眼上也有中文版的,也是最新的,当然会比最最新的旧一点点点循环。虽然翻译过来的手册和英文原版的差别很小,但这并不意味着没有差别。像原版中的有绿叶标示的部分,翻译过来的就没有。虽然绿叶标示的部分你可能看的不大懂(有些东西我就看不明白555),不过你一旦看懂可能就会获益匪浅,而且原版的味道最正。所以如果你的英语水平够的话我还是推荐大家看原版的手册。好了不废话了。下面开门见山,步入正题。 要启用@AspectJ支持的话要在Spring配置文件中加入下面一句
Tags: Spring  aspectj  aop  
AspectJ如何实现AOP
使用AspectJ,我们不用对原有的代码做任何修改,就可以为代码提供不同的Aspect(方面)--比如,认证,事务等。我们只需要提供两个不同的Aspect--认证Aspect和事务Aspect。我们来看看,AspectJ编译器为我们做了什么事情。1. 首先,AspectJ从文件列表里取出所有的文件名,然后读取这些文件,进行分析。2. AspectJ发现一些文件含有aspect的定义,在这个例子里,就是AuthAspect和TransactionAspect的定义;这些aspect就是代码生成规则。3. AspectJ根据这些aspect代码生成规则,修改添加你的源代码。在这个例子里,就是修改添加Bank文件。4. AspectJ读取AuthAspect的定义,发现了一个pointcut--bankMethods();这个pointcut的定义是execution(* Bank.deposit(…)) || execution(* Bank. withdraw (…)),表示所有对Bank类的deposit和withdraw方法的执行点。5. AspectJ继续读取AuthAspect的定义,发现了一个around(),这在AspectJ中叫做Advice, Advice允许你在某个类的方法的调用之前或调用之后,加入另外的代码。所示代码中的around()的" // 验证account是否为合法用户"部分,就是要加入的代码。这段代码要加在哪里呢?around()后面跟了一个pointcut--bankMethods()。根据这个pointcut,AspectJ会把这段代码加入到Bank.deposit和Bank.withdraw两个方法的执行之前。6. AspectJ读取TransactionAspect的定义,象第(4)步一样,发现了发现了一个pointcut--bankMethods()。AspectJ继续读取AuthAspect的定义,发现了一个around()。这次AspectJ把"Begin Transaction"和"End Transaction"两段代码加在Bank.deposit和Bank. withdraw两个方法的执行前后。
Tags: aspectj  aop  Spring  IOC  
Spring 2.0中的AOP实现-aspectj-Advice
在Spring 2.0中,除了传统的通过实现AOP AIP的方式来实现Advice之外,还提供了两种更加简便的方式来实现Advice:1)基于XML Schema的设置;2)基于Annotation的支持,采用这两种方式,Advice将不用实现特定的接口。现在让我们来看看如何使用这两种方式来分别实现Before Advice、After Advice、Around Advice、Throwing Advice。 一、Before Advice:基于XML Schema 当基于XML Schema实现Before Advice时,你的Advice类不用实现org.springframework.aop.MethodBeforeAdvice接口,例如:
二、Before Advice:基于Annotation 使用Annotation来实现Advice,在XML文件上的定义要比基于XML Sechema的方法要简便的多,但在实现Before Advice类时,则需要使用到@Aspect、@Before标识,并需要引入org.aspectj.lang.annotation包中的类。还以LogBeforeAdvice为例,LogBeforeAdvice类需要改为:
三、After Advice:基于XML Sechma 和Before Advice一样,基于XML Sechma实现After Returning Advice时,不再需要org.springframework.aop.AfterReturningAdvice接口:
四、After Advice:基于Annotation 和Before Advice相似,使用@AfterReturning来表示After Returning Advice:
五、Around Advice:基于XML Sechma 在Spring 2.0中,Around Advice不用实现org.aoplliance.intercept.MethodInterceptor接口,但Advice的方法必须返回对象,并且必须定义一个ProceedingJoinPoint参数,例如:
六、Around Advice:基于Annotation 和Before Advice相似,使用@Around来表示Around Advice:
七、Throw Advice:基于XML Sechma 在Spring 2.0中,Throw Advice不用实现org.springframework.aop.ThrowsAdvice接口,但Advice的方法必须定义Throwable(或其子类)参数,例如:
八、Throw Advice:基于Annotation
Tags: Spring  aop  aspectj  Advice  
分页:[«] 1[»]
Feed订阅集
勤劳致富^.^
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(VS为主):3769186.