SpringAOP学习小结

上传人:cl****1 文档编号:487389907 上传时间:2024-01-30 格式:DOC 页数:8 大小:55.52KB
返回 下载 相关 举报
SpringAOP学习小结_第1页
第1页 / 共8页
SpringAOP学习小结_第2页
第2页 / 共8页
SpringAOP学习小结_第3页
第3页 / 共8页
SpringAOP学习小结_第4页
第4页 / 共8页
SpringAOP学习小结_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《SpringAOP学习小结》由会员分享,可在线阅读,更多相关《SpringAOP学习小结(8页珍藏版)》请在金锄头文库上搜索。

1、一、AOP 概念 Joinpoint:它定义在哪里加入你的逻辑功能,对于Spring AOP,Jointpoint指的就是Method。 Advice:特定的Jointpoint处运行的代码,对于Spring AOP 来讲,有Before advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。 Pointcut:一组Joinpoint,就是说一个Advice可能在多个地方织入, Aspect:这个我一直迷惑,它实际是Advice和Pointcut的组合,但是Spring AOP 中的Advisor也是这样

2、一个东西,但是Spring中为什么叫Advisor而不叫做Aspect。 Weaving:将Aspect加入到程序代码的过程,对于Spring AOP,由ProxyFactory或者ProxyFactoryBean负责织入动作。 Target:这个很容易理解,就是需要Aspect功能的对象。 Introduction:引入,就是向对象中加入新的属性或方法,一般是一个实例一个引用对象。当然如果不引入属性或者引入的属性做了线程安全性处理或者只读属性,则一个Class一个引用也是可以的(自己理解)。Per-class lifecycle or per-instance life cycle 二、AO

3、P 种类 1、静态织入:指在编译时期就织入Aspect代码,AspectJ好像是这样做的。 2、动态织入:在运行时期织入,Spring AOP属于动态织入,动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行(性能较差)。 三、Spring AOP 代理原理 Spring AOP 是使用代理来完成的,Spring 会使用下面两种方式的其中一种来创建代理: 1、JDK动态代理,特点只能代理接口,性能相对较差,需要设定一组代理接口。 2、CGLIB 代理,可代理接口和类(final method除外),性能较高(

4、生成字节码)。 四、Spring AOP 通知类型 1、BeforeAdvice:前置通知需实现MethodBeforeAdvice,但是该接口的Parent是BeforeAdvice,致于什么用处我想可能是扩展性需求的设计吧。或者Spring未来也并不局限于Method的JoinPoint(胡乱猜测)。BeforeAdvice可以修改目标的参数,也可以通过抛出异常来阻止目标运行。 2、AfterreturningAdvice:实现AfterreturningAdvice,我们无法修改方法的返回值,但是可以通过抛出异常阻止方法运行。 3、AroundAdvice:Spring 通过实现Meth

5、odInterceptor(aopalliance)来实现包围通知,最大特点是可以修改返回值,当然它在方法前后都加入了自己的逻辑代码,因此功能异常强大。通过MethodInvocation.proceed()来调用目标方法(甚至可以不调用)。 4、ThrowsAdvice:通过实现若干afterThrowing()来实现。 5、IntroductionInterceptor:Spring 的默认实现为DelegatingIntroductionInterceptor 五、Spring AOP Pointcut 以上只是Advice,如果不指定切入点,Spring 则使用所有可能的Jointpo

6、int进行织入(当然如果你在Advice中进行方法检查除外)。因此切入点在AOP中扮演一个十分重要的角色。Spring 2.0 推荐使用AspectJ的Annocation的切入点表达式来定义切入点,或者使用来定义AOP,这方面本篇不做考虑。 1、Pointcut:它是Spring AOP Pointcut的核心,定义了getClassFilter()和getMethodMatcher()两个方法。 2、ClassFilter:定义了matches(Class cls)一个方法。 3、MethodMatcher() 定义了matches(Method,Class),isRuntime(),ma

7、tches(Mathod,Class,Object)三个方法,如果isRuntime()返回true则表示为动态代理(实际是动态代理的动态代理),则调用第三个方法(每访问一次调用一次),否则调用第一个方法(并且只调用一次) 4、Spring AOP静态切入点的几个实现。 ComposablePointcut 太复杂一个切入点无法表达就用这个,union MethodMatcher和ClassFilter或者intersection MethodMatcher、ClassFilter和Pointcut。为什么不实现union Pointcut? 而只能通过Pointcuts类对Pointcut进

8、行union操作。 ControlFlowPointcut 想对程序的运行过程进行追踪就用这个 DynamicMatchMatcherPointcut 想用动态AOP 就用这个 JdkRegexpMethodPointcut 想使用正则表达式就用这个 Perl5RegexpMethodPointcut NameMatchMethodPointcut 想用方法名字来匹配就用这个 StaticMethodMatcherPointcut 静态切入点就用这个 没有人反对你直接实现Pointcut:)。 六、Spring AOP 中的Advisor其实就是Aspect 1、 PointcutAdviso

9、r 其实一般使用DefaultPointcutAdvisor就足够了,给它Advice和Pointcut。 当然如果想少写那么几行代码也可以使用NameMatchMethodPointcutAdvisor,RegexpMethodPointcutAdvisor等。 更多Advisor可以查看API文档。 2、 IntroductionAdvisor 默认实现为DefaultIntroductionAdvisor。 七、AOP ProxyFactory 使用代码实现AOP 可使用ProxyFactory 声明式AOP 可使用ProxyFactoryBean ProxyFactoryBean 需要

10、设定 target,interceptorNames(可以是Advice或者Advisor,注意顺序) 对接口代理需设置proxyInterfaces 八、自动代理 BeanNameAutoProxyCreator Java代码 1. 2. jdk*,onlyJdk 3. 4. 5. myInterceptor 6. 7. 8. jdk*,onlyJdkmyInterceptorDefaultAdvisorAutoProxyCreator Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 九、Spring 2.0 AOP 略 以上为本人这段时间来看Spring AOP的一些学习体会,有什么说的不对的地方请批评指正。嘿,楼主给出了所有的概念,我想在这里给一个完整的例子,以帮助初学者更好地理解, 你们可以先不必理会上面的概念,等运行这个例子后,再慢慢地做照着理解。 我使用的是Spring 2.0 的APO, 它引入了一种更加简单并且更强大的方式来定义切面。 马上开始吧: 首先建一个普通Java项目:com.longthsoft.learn.spring 把 spring.jar, commons-lo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号