(spring-第18回【AOP基础篇】) 创建切面
一、 在创建增强一节中,增强被织入到目标类的所有方法中,假设我们希望有选择地织入到目标类某些特定的方法中,就需要使用切点进行目标连接点的定位。
二、 spring通过org.springframework.aop.Pointcut接口描述切点。PointCut由ClassFilter和MethodMatcher构成,前者定位类,后者定位特定方法。
三、 Spring支持静态方法匹配器和动态方法匹配器。
a) 静态:仅对方法签名进行匹配,而且只会判别一次。
b) 动态:在运行期检查方法入参的值。因为每次调用方法时入参可能会不一样,所以每次都需要判断,影响了性能,动态匹配不常用。
四、 切点类型(插入的具体位置)(每种类型都会有一个抽象基类)
a) 静态方法切点
b) 动态方法切点
c) 注解切点
d) 表达式切点
e) 流程切点
f) 复合切点
五、 切面类型(插入的具体位置+被插入的代码)
a) spring通过org.springframework.aop.Advisor接口表示切面,一个切面同时包括横切代码和连接点信息。
b) 切面分为三类:
一般切面Advisor,它代表的横切的连接点是所有目标类的所有方法。
PointcutAdvisor:代表具有切点的切面。
IntroductionAdvisor:代表引介切面。
六、 举例
a) 静态普通方法名匹配切面:
第一步,定义目标类(我们想要给Waiter类的greetTo方法之前打印一句友好的话)
第二步,通过继承PointcutAdvisor的实现类来过滤方法和类(定义切面)
(第一个方法定位目标类的目标方法,即greetTo,第二个方法定位目标类,即Waiter)
第三步,定义增强类(前置增强,获取方法名,即greetTo,打印类名、方法名,然后打印友好的话。)
第四步,把切面、增强、目标类交织起来。
b) 静态正则表达式方法匹配切面
- 已有的功能齐备实现类:StaticMethodMatcherPointcutAdvisor。
- 无需扩展上述类来定义切面,直接在XML中配置即可。
- 比静态匹配多了正则匹配的功能,在配置中写正则方法。
c) 动态切面
比静态匹配多了动态匹配。也就是说,在定义切面的实现类中,除了方法检查和类检查外,多了个动态切点检查的方法。
七、 自动创建代理
a) 之前讲过的方法中,每次到最后一步都需要通过ProxyFactory来交织增强,切面和目标类(或者在XML中通过ProxyFactoryBean来配置)。spring通过BeanPostProcessor可以自动的完成这项工作。
- BeanNameAutoProxyCreator允许为一组特定配置名的Bean自动创建代理实例。
- DefaultAdvisorAutoProxyCreator:对容器中所有的Advisor进行扫描,自动将这些切面应用到匹配的Bean中。
- AnnotationAwareAspectJAutoProxyCreator,为包含AspectJ注解的Bean自动创建代理实例。
(spring-第18回【AOP基础篇】) 创建切面的更多相关文章
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
写在前面的话 承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶
日常啰嗦 上一篇文章<Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建>简单的讲了一下SVN服务器的搭建,并没有详细的介绍配置文件及一些复杂的功能, ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结
不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇
基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...
- (spring-第16回【AOP基础篇】)基本概念
AOP(Aspect Oriented Programing),面向切面方程.介绍具体定义前,先看一个例子: package com.baobaotao.concept; public class F ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介
很久之前就打算开始写一下自己的技术博客了,实在抽不出时间所以计划一直搁置了,最近项目进度渐渐缓了下来,不那么忙了,也因此开始筹备自己的博客.说到这次博客的主角,也是无心插柳找到的,来源于两年前自己写的 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(九)版本控制
日常啰嗦 还好在第一篇文章里就列好了接下来的主线及要写的知识点,不然都不知道要写什么东西了,开篇里已经列了基础篇要讲svn和git的知识点,所以这一篇就写一下版本控制. 项目实际效果展示在这里,账密: ...
- 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍
试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...
随机推荐
- 【转】本地存储-localStroage/sessionStorage存储
原文地址:[js学习笔记-103]----本地存储-localStroage/sessionStorage存储 客户端存储 l WEB存储 web存储最初作为html5的一部分被定义成API形式,但 ...
- ArrayBlockingQueue
ArrayBlockingQueue是阻塞队列的一种,基于数组实现,长度固定,队尾添加,队首获取, 构造函数: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font ...
- R----dplyr包介绍学习
dplyr包:plyr包的替代者,专门面对数据框,将ddplyr转变为更易用的接口 %>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以 ...
- [问题2014S04] 复旦高等代数II(13级)每周一题(第四教学周)
[问题2014S04] 设 \(A\in M_n(\mathbb{C})\) 为可对角化的 \(n\) 阶复方阵, \(f(x)\in\mathbb{C}[x]\) 为复系数多项式, 证明: \[B ...
- VS2010/2012配置优化记录笔记
VS2010/2012配置优化记录笔记 在某些情况下VS2010/2012运行真的实在是太卡了,有什么办法可以提高速度吗?下面介绍几个优化策略,感兴趣的朋友可以参考下,希望可以帮助到你 有的时候V ...
- 断言(ASSERT)的用法
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”. 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解 ...
- ie7 父元素宽度自适应且为浮动的话 子元素的宽度将不能按比例设置问题
好久没切图,昨天遇到个浏览器兼容的老问题,在ie7下,父元素设置浮动后,其宽度是自适应的,子元素的宽度若没有确定则将显示最小宽度,即文本所占的宽度. 正常其他浏览器显示如下: ie7中显示效果如下: ...
- python走起之第四话
本节大纲: 一:双层装饰器:一个函数可以被多层装饰器进行装饰,函数渲染(编译)从下到上,函数执行从上到下.如下程序: 1 #!/usr/bin/env python 2 #-*-coding:utf- ...
- mac 安装 Scrapy
一.pip安装Scrapy 运行命令 sudo pip install Scrapy(不带sudo 可能会出现 Permission denied) 然后 pip freeze 查看已经有 scrap ...
- Winform实现右下角弹窗_提示信息
网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的.下面介绍两种方法. 第一步:设计窗体 第二步:实现代码 第一种方法 引用user32 声明常量 窗体Load事件 窗体FormC ...