一、   在创建增强一节中,增强被织入到目标类的所有方法中,假设我们希望有选择地织入到目标类某些特定的方法中,就需要使用切点进行目标连接点的定位。

二、   spring通过org.springframework.aop.Pointcut接口描述切点。PointCut由ClassFilter和MethodMatcher构成,前者定位类,后者定位特定方法。

三、   Spring支持静态方法匹配器和动态方法匹配器。

a)   静态:仅对方法签名进行匹配,而且只会判别一次。
b)   动态:在运行期检查方法入参的值。因为每次调用方法时入参可能会不一样,所以每次都需要判断,影响了性能,动态匹配不常用。

四、   切点类型(插入的具体位置)(每种类型都会有一个抽象基类)

a)   静态方法切点
b)   动态方法切点
c)   注解切点
d)   表达式切点
e)   流程切点
f)   复合切点

五、   切面类型(插入的具体位置+被插入的代码)

a)   spring通过org.springframework.aop.Advisor接口表示切面,一个切面同时包括横切代码和连接点信息。
b)   切面分为三类:
    1. 一般切面Advisor,它代表的横切的连接点是所有目标类的所有方法。
    2. PointcutAdvisor:代表具有切点的切面。
    3. IntroductionAdvisor:代表引介切面。

六、   举例

a)   静态普通方法名匹配切面:

第一步,定义目标类(我们想要给Waiter类的greetTo方法之前打印一句友好的话)

第二步,通过继承PointcutAdvisor的实现类来过滤方法和类(定义切面)

(第一个方法定位目标类的目标方法,即greetTo,第二个方法定位目标类,即Waiter)

第三步,定义增强类(前置增强,获取方法名,即greetTo,打印类名、方法名,然后打印友好的话。)

第四步,把切面、增强、目标类交织起来。

b)   静态正则表达式方法匹配切面
  1. 已有的功能齐备实现类:StaticMethodMatcherPointcutAdvisor。
  2. 无需扩展上述类来定义切面,直接在XML中配置即可。
  3. 比静态匹配多了正则匹配的功能,在配置中写正则方法。
c)   动态切面

比静态匹配多了动态匹配。也就是说,在定义切面的实现类中,除了方法检查和类检查外,多了个动态切点检查的方法。

七、   自动创建代理

a)   之前讲过的方法中,每次到最后一步都需要通过ProxyFactory来交织增强,切面和目标类(或者在XML中通过ProxyFactoryBean来配置)。spring通过BeanPostProcessor可以自动的完成这项工作。

  1. BeanNameAutoProxyCreator允许为一组特定配置名的Bean自动创建代理实例。
  2. DefaultAdvisorAutoProxyCreator:对容器中所有的Advisor进行扫描,自动将这些切面应用到匹配的Bean中。
  3. AnnotationAwareAspectJAutoProxyCreator,为包含AspectJ注解的Bean自动创建代理实例。

(spring-第18回【AOP基础篇】) 创建切面的更多相关文章

  1. Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM

    写在前面的话   承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶

    日常啰嗦 上一篇文章<Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建>简单的讲了一下SVN服务器的搭建,并没有详细的介绍配置文件及一些复杂的功能, ...

  3. Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...

  4. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结

    不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇

    基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...

  6. (spring-第16回【AOP基础篇】)基本概念

    AOP(Aspect Oriented Programing),面向切面方程.介绍具体定义前,先看一个例子: package com.baobaotao.concept; public class F ...

  7. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介

    很久之前就打算开始写一下自己的技术博客了,实在抽不出时间所以计划一直搁置了,最近项目进度渐渐缓了下来,不那么忙了,也因此开始筹备自己的博客.说到这次博客的主角,也是无心插柳找到的,来源于两年前自己写的 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(九)版本控制

    日常啰嗦 还好在第一篇文章里就列好了接下来的主线及要写的知识点,不然都不知道要写什么东西了,开篇里已经列了基础篇要讲svn和git的知识点,所以这一篇就写一下版本控制. 项目实际效果展示在这里,账密: ...

  9. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍

    试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...

随机推荐

  1. python : HTML+CSS (左侧菜单)

    左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  2. VS2012下基本类型大小

  3. Python3基础 sum,range 计算1到100的和

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. 原来MySQl就是这样工作的!

    一.MySQL简单介绍     MySQL是当今最流行的开源数据库管理系统,超过10亿的下载量足可以证明这点.MySQL以其速度.高可靠性.简单易用,广泛应用,一些大型企业也在逐渐应用,如:Faceb ...

  5. viewport和media query

    viewport: 你可以定义viewport的宽度.如果你不使用width=device-width,在移动端上你的页面延伸会超过视窗布局的宽度(width=980px),如果你使用了width=d ...

  6. 今天的感悟,对于python中的list()与w3c教程

    首先本来想百度一下python定义列表的时候用 list()与直接用[]有什么区别,其中没有找到相关直接资料,看到了W3c菜鸟教程中之前看到的tuple,不禁想起list(tuple)是用来将元组转换 ...

  7. iOS开发 Apple Pay

    一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...

  8. js 监听窗口变化

    window.onresize = function () {.....}jquery $(window).resize(function)

  9. 当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

    在创建事务复制时,很多时候不一定使用快照进行初始化,而是使用备份还原初始化.当对有标识列(即identity的自增列)的表进行复制的时候,使用备份还原初始化搭建起来的复制常常就会报错,即:当 IDEN ...

  10. JQuery设置和去除disabled属性

    //两种方法设置disabled属性 $('#areaSelect').attr("disabled",true); $('#areaSelect').attr("dis ...