二、Spring——AoP
AOP概述
AOP是OOP的有益补充,他为程序开发提供了一个崭新的思考角度,可以将重复性的横切逻辑抽取到统一的模块中,通过OOP的纵向抽象和AOP的横向抽取,程序才能真正解决复杂性代码问题。
Spring采用JDK动态代理和CGLib动态代理的技术在运行期间植入增强,所以我们不需要装备特殊的编译器或者类装载器就可以使用AOP的功能。要使用JDK动态代理,目标类必须实现接口,而CGLib不对目标类做任何限制,他通过动态生成目标子类的方式提供代理。JDK在创建代理对象时性能高于CGLib,而生成代理对象的运行性能却比CHLIb的低,入股是singleton的代理,我们推荐使用CGLib动态代理。
Spring只能在方法级别上植入增强,Spring提供了4中类型的方法增强,分别是前置增强、后置增强、环绕增强和异常抛出增强,此外还有一种特殊的引介增强,引介增强是类级别的,他为目标类织入新的接口实现。从广义上说,增强其实就是一种最简单的切面,他既包括横切代码也包括切点信息,只不过他的切点只是简单的方法相对位置的信息。所以增强一般都需要和切点联合才可以表示一个更具使用性的切面。
在Spring中,普通的切点通过目标类名和方法名描述切点的信息。流程切点是比较特殊的切点,他通过方法调用堆栈的运行环境信息来决定连接点。有时,我们需要通过切点的交叉或合并描述一个最终的切点,这时,可以使用ComposablePointcut的复合切点。
切面是增强和切点的联合体,我们可以很方便地通过Spring提供的ProxyBeanFactory将切面织入到不同的目标类中。当然,为每一个目标类手工配置一个切面是比较烦琐的,
Spring利用BeanPostProcessor可干涉Bean生命周期的机制,提供了一些可以自动创建代理,织入切面的自动代理创建器,其中DefaultAdvisorAutoProxyCreator是功能强大的自动代理创建器,他可以将容器中所有Advisor自动织入到目标Bean中。
Spring AOP通过Pointcut(切点)指定在哪些类的哪些方法上织入横切逻辑,通过Advice(增强)描述横切逻辑和方法的具体织入点(方法前、方法后、方法的两端等)。
此外,Spring通过Advisor(切面)将Pointcut和Advice两者组装起来。有了Advisor的信息,Spring就可以利用JDK或CGLib的动态代理技术采用统一的方式为目标Bean
创建织入切面的代理对象了。使用@AspectJ定义切面比基于接口定义的切面更加直观、更加简洁,成为Spring推荐的切面定义方式。切点表达式语法和切点函数是@AspectJ的重心。
如果项目因某种原因无法使用JDK5.0,则可以采用基于Schema配置的方式继续使用AspectJ的切点表达式和增强定义,基于Schema的配置采用
<aop:aspect>描述@Aspect类所描述的相同信息,只是换一种方法而已。此外,还可以通过<aop:advisor>复用旧系统已有的Advice并配合使用AspectJ的切点表达式。
二、Spring——AoP的更多相关文章
- 代理模式及Spring AOP (二)
一.Spring AOP 1.1 Spring AOP 底层还是用的动态代理.如果目标对象所对应的类有接口,spring就用jdk生成代理对象: 如果目标对象所对应的类没有接口,spring就用C ...
- Spring AOP详细介绍
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...
- Spring技术内幕:Spring AOP的实现原理(二)
**二.AOP的设计与实现 1.JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理.而这样的动态代理实际上是JDK的一个特性.通过JDK的动态代理特性,能够为随意Jav ...
- spring使用之旅(二) ---- AOP的使用
什么是AOP? AOP基本概念 AOP使用--注解方式 AOP使用--XML方式 实例--日志 写在最前面的(源码地址): https://github.com/xc83415134/spring_a ...
- 深入理解Spring AOP之二代理对象生成
深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP
基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...
- spring in action 学习笔记二:aop的理解
一: aop的思想的来在哪里? 一个系统一般情况下由多个组件组成,而每一个组件除了干自己的本职工作以外,有时还会干一些杂活(如:日志(logging).事务管理(transaction manager ...
- Spring AOP源码分析(二):AOP的三种配置方式与内部解析实现
AOP配置 在应用代码中,可以通过在spring的XML配置文件applicationContext.xml或者基于注解方式来配置AOP.AOP配置的核心元素为:pointcut,advisor,as ...
随机推荐
- ASP.NET MVC ActionResult的其它返回值
一.ascx页面 场景:要返回代码片断,比如Ajax返回一个子页 我们先新建一个Action public ActionResult Ascx() { return PartialView(); } ...
- HTTP POST上传文件(wininet实现)
void UploadFile(LPTSTR lpFilePath) { HINTERNET hSession=0; HINTERNET hConnect=0; HINTERNET hRequest= ...
- 为speedphp最新版添加 仿Yii 的简易版 数据验证 支持不同场景,自定义回调
给个意见或建议吧 扩展一个Model基类 <?php class BaseModel extends Model{ use ValidationRules; public function ru ...
- CSU 1325 莫比乌斯反演
题目大意: 一.有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数: 二.有多少个有序数对(x,y)满足1<=x<=A ...
- c3p0的log4j配置
com.mchange.v2.log.log4j.Log4jMLog=info,console,c3p0fileslog4j.appender.c3p0files=org.apache.log4j.D ...
- 排序小结(C++版)
一.快速排序 #include <iostream> using namespace std; int adjust(int a[],int start,int end) { int i, ...
- 1、android源代码下载及目录分析,和eclipser的跟踪
1.在eclipse中跟踪源代码:假如对mainactivity.java里面的activity按Ctrl+鼠标左键(前提已经导入android源代码:方法1:在项目点击右键,然后找到properti ...
- SharePoint 2016 Beta 2 使用体验
博客地址:http://blog.csdn.net/FoxDave 上一篇主要描述了安装SharePoint 2016的过程,本篇写一些概览性的东西. 首先打开管理中心(依然是在安装完会有Issue ...
- Python学习路程day13
JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...
- cocos2dx 3.8版关于#include "GB2ShapeCache-x.h"
关于coco2d-x 3.8版的PhysicsEditor.exe1.09版的GB2ShapeCache-x.h.cpp中有些方法更新了和容器的使用方法,还有就是头文件include "CC ...