论坛首页 Java企业应用论坛

Spring AOP 学习小结

浏览 35312 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-29  
switchhub 写道
package com.longthsoft.learn.spring;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class SimpleAspect {

@Pointcut("execution(* com.longthsoft.learn.spring.models.*.say*())")
public void simplePointcut() { }

@AfterReturning(pointcut="simplePointcut()")
public void simpleAdvice() {
System.out.println("Merry Christmas");
}
}
这段代码不明白!!!

我是这样理解的 不知道对不对 请高手给指正
@Aspect 声明了这个类是一个切面。 切面=切入点+处理 下面分别定义了切入点和处理
@Pointcut("execution(* com.longthsoft.learn.spring.models.*.say*())") 这是定义了一个切入点
@AfterReturning(pointcut="simplePointcut()") 定义了一个AfterReturning类型的处理,处理的是simplePointcut()这个切入点中匹配的方法


0 请登录后投票
   发表时间:2007-03-30  
写得非常不错!
0 请登录后投票
   发表时间:2007-04-05  
学习中,又涨了些知识
0 请登录后投票
   发表时间:2007-04-11  
To bencode:
是不是还要在applicationContext.xml中加上<aop:aspectj-autoproxy proxy-target-class="true"/> proxy-target-class="true"它表示代理的是类
0 请登录后投票
   发表时间:2007-05-26  
jamesby 写道
Aspect:这个我一直迷惑,它实际是Advice和Pointcut的组合,但是Spring AOP 中的Advisor也是这样一个东西,但是Spring中为什么叫Advisor而不叫做Aspect

Aspect是Advice(通知)在抽象概念上的表述,如果说用把Aspect用类来类比的话,那么Advice就是其Aspect具体的实现。但绝对与Advice+Pointcut的组合没有关系,这两者的组合在spring中有另外一个名词就是“Advisor”


jamesby 写道
三、Spring AOP 代理原理
Spring AOP 是使用代理来完成的,Spring 会使用下面两种方式的其中一种来创建代理:
1、JDK动态代理,特点只能代理接口,性能相对较差,需要设定一组代理接口。
2、CGLIB 代理,可代理接口和类(final method除外),性能较高(生成字节码)。

1。“JDK动态代理”与“CGLIB代理”的性能差别楼主恰好说反了,JDK动态代理是在1.x中是要比CGLIB快一些,但是目前2.0版本应该差不多了。
2。其实他们两者最主要区别还不在于性能上的差别,主要是要看实际的项目的特点(比如说该项目是否一个遗留系统)
    a)JDK动态代理:使用接口于实现分离,面向接口编程是spring推荐的方式。
    b)CGLIB代理:  主要适用于改造遗留系统,这些系统一般不会继承特定的接口。
以下是spring2.0文档对其进行的一些阐述:



引用

Imagine that in our example above, there was no Person interface: we needed to advise a class called Person that didn't implement any business interface. In this case, you can configure Spring to use CGLIB proxying, rather than dynamic proxies. Simply set the proxyTargetClass property on the ProxyFactoryBean above to true. While it's best to program to interfaces, rather than classes, the ability to advise classes that don't implement interfaces can be useful when working with legacy code. (In general, Spring isn't prescriptive. While it makes it easy to apply good practices, it avoids forcing a particular approach.)


引用

There's little performance difference between CGLIB proxying and dynamic proxies. As of Spring 1.0, dynamic proxies are slightly faster. However, this may change in the future. Performance should not be a decisive consideration in this case
0 请登录后投票
   发表时间:2007-07-01  
写得非常好!

关于 AOP 的几个基础概念,我感觉Spring 的参考文档上面讲得没有《Pro Spring》这本书上讲的好。

比较一下:
Spring Reference:
引用
Pointcut: A predicate that matches join points. Advice is associated with a pointcut expression and runs at any join point matched by the pointcut (for example, the execution of a method with a certain name). The concept of join points as matched by pointcut expressions is central to AOP: Spring uses the AspectJ pointcut language by default.


《Pro Spring》
引用
A pointcut is a collection of joinpoints that you use to define when advice should be executed. By creating pointcuts, you gain fine-grained control over how you apply advice to the components in your application. As mentioned previously, a typical joinpoint is a method invocation. A typical pointcut is the collection of all method invocations in a particular class. Often you can compose pointcuts in complex relationships to further constrain when advice is executed. We discuss pointcut composition in more detail in the next chapter.


我觉得《Pro Spring》这本书写得实在是太好了,非常容易懂。
而且,这本书的作者之一也是Spring 的主设计师:Rob Harrop. 

我一直以为,最好的书籍莫过于自带的文档。
当是当我看过《Pro Spring》这本书之后,感觉比看Spring的参考文档学习起来快多了,可谓事半功倍。。。

大家以为如何?

刚开始我想看文档来学Spring AOP,可是文档上面又没有完整例子,而且看起来也不是很容易懂,是不是学习方法的问题?

各位有什么好的建议?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics