第20章 Spring的AOP

第20章 Spring的AOP

ID:42921310

大小:135.00 KB

页数:27页

时间:2019-09-25

第20章 Spring的AOP_第1页
第20章 Spring的AOP_第2页
第20章 Spring的AOP_第3页
第20章 Spring的AOP_第4页
第20章 Spring的AOP_第5页
资源描述:

《第20章 Spring的AOP》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第20章Spring的AOPIoC以外Spring的另一个关键的组件就是AOP框架。尽管如此,SpringIoC容器并不依赖于AOP,这意味着可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得SpringIoC容器更加完善。20.1SpringAOP简介面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。除了类(classes)以外,AOP提供了切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。(这些关注点术语通常称作横

2、切(crosscutting)关注点。)20.1.1AOP的概念AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次

3、中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。20.1.2AOP的术语首先从定义一些重要的AOP概念开始。这些术语不是Spring特有的。不幸的是,Spring术语并不是特别的直观;如果Spring使用自己的术语,将会变得更加令人困惑。切面(Aspect):连接点(Joinpoint):通知(Advice)

4、:切入点(Pointcut):引入(Introduction):目标对象(TargetObject):AOP代理(AOPProxy):20.1.3Spring的AOP有何特点Spring2.0引入了一种更加简单并且更强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注解。这两种风格都完全支持通知(Advice)类型和AspectJ的切入点语言,虽然实际上仍然使用SpringAOP进行织入(Weaving)。这也是Spring推荐的做法,本书将重

5、点介绍这种方法。Spring缺省使用J2SE动态代理(dynamicproxies)来作为AOP的代理。这样任何接口都可以被代理(本书前面Spring入门一章就是采用这种方法)。20.1.4SpringAOP的功能和目标SpringAOP用纯Java实现。它不需要专门的编译过程。SpringAOP不需要控制类装载器层次,因此它适用于J2EEweb容器或应用服务器。Spring目前仅支持使用方法调用作为连接点(joinpoint)(在Springbean上通知方法的执行)。虽然可以在不影响到Sprin

6、gAOP核心API的情况下加入对成员变量拦截器支持,但Spring并没有实现成员变量拦截器。20.2@AspectJ配置AOP在Spring2.0中最激动人心的增强之一是关于SpringAOP,它变得更加便于使用而且更加强大,主要是通过复杂而成熟的AspectJ语言的支持功能来实现,而同时保留纯的基于代理的Java运行时。"@AspectJ"使用了Java5的注解,可以将切面声明为普通的Java类。AspectJ5发布的AspectJproject中引入了这种@AspectJ风格。Spring2.0

7、使用了和AspectJ5一样的注解,使用了AspectJ提供的一个库来做切点(pointcut)解析和匹配。但是,AOP在运行时仍旧是纯的SpringAOP,并不依赖于AspectJ的编译器或者织入器(weaver)。20.2.1启用@AspectJ支持为了在Spring配置中使用@AspectJaspects,必须首先启用Spring对基于@AspectJaspects的配置支持,自动代理(autoproxying)基于通知是否来自这些切面。自动代理是指Spring会判断一个bean是否使用了一个

8、或多个切面通知,并据此自动生成相应的代理以拦截其方法调用,并且确认通知是否如期进行。20.2.2声明一个切面在启用@AspectJ支持的情况下,在applicationcontext中定义的任意带有一个@Aspect切面(拥有@Aspect注解)的bean都将被Spring自动识别并用于配置在SpringAOP。下面是在applicationcontext中的一个常见的bean定义,这个bean指向一个使用了@Aspect注解的bean类:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。